본문 바로가기

백준7

[2321] 수 복원하기 - python 풀이 알고리즘 설계 기법 소인수분해 알고리즘 핵심은 "어떤 수 X를 소인수분해 하려면 X를 2부터 차례대로 X의 제곱근까지의 숫자로 나누어 떨어지는지 검사"하면 된다. 하지만 for문을 쓰면 쓸데없이 소스가 길어지기 때문에 while문을 활용해서 나눈 값이 0이면 출력하는 방식으로 프로그래밍 하는것이 효율적이다. 답 N = int(input()) T = [] for _ in range(N): T.append(int(input())) for i in T: k = 2 count = 0 while i != 1: if i % k == 0: i //= k count += 1 else: if count != 0: print(k, count) k += 1 count = 0 if count != 0: print(k, cou.. 2022. 3. 23.
[미해결][12976] 돌 옮기기 - python 코드 알고리즘 설계 기법 모르겠음. 없는 듯 런타임 에러났다.. 지금 작성한 코드는 답이 나오긴 하는 것 같은데, 코드를 써놓고 딱 봐도 시간 엄청 걸리게 생겼다. 코드 N = int(input()) a = list(map(int, input().split())) b = list(map(int, input().split())) def find(a, b): if sum(a) != sum(b): return -1 else: arr = [] result = 0 for i in range(N): arr.append(a[i]-b[i]) #음수: 부족한 양 양수:넘치는 양 for i in range(N): if arr[i] < 0: x = y = i while arr[i] != 0: while (arr[x] 0: res.. 2022. 3. 23.
[3029] 경고 - python 풀이 알고리즘 설계 기법 없음 시, 분, 초 단위로 각각 따져서 시간 차이 계산하면 된다. 단, 60초가 되면 분 단위에 영향을 미치고, 60분이 되면 시 단위에 영향을 미치므로 초, 분, 시 순서로 계산해야 한다. 그리고 문제에서 마음에 안 드는 건 24:00:00 조건. 00:00:00시에서 00:00:00시까지 대기 시간은 24시간이 아니라 그냥 대기를 안 하면 되는 거 아니냐고... 아무튼 입력 두 개가 같은 경우에는 24시간을 기다려야 하므로 그 조건은 따로 따져줬다. 답 A = list(map(int, input().split(':'))) B = list(map(int, input().split(':'))) if A[2] > B[2]: S = 60-A[2]+B[2] A[1] += 1 else:S =.. 2022. 3. 22.
[3028] 창영마을 - python 풀이 알고리즘 설계 기법 선형 탐색 이틀전에 풀었는데... 어제 선택된 백준 문제가 어려워서 그거 푸느라 글을 못 썼다 아무튼 이번 문제는 쉬워서 세트문제로 두 개 풀었다. 3028번 문제는 야바위했을 때 공 위치 찾는 코드 짜는거였다. 1) 공 위치가 어디에 있는지 2) 어느 컵을 옮기는지 만 신경쓰면 풀 수 있다 답 N = list(input()) ball = 1 for i in N: if i == 'A': if ball == 1: ball = 2 elif ball == 2 : ball = 1 elif i == 'B': if ball == 2: ball = 3 elif ball == 3 : ball = 2 else: if ball == 1: ball = 3 elif ball == 3 : ball = 1 p.. 2022. 3. 22.
[12887] 경로 게임 - python 풀이 알고리즘 설계 기법 Backtracking 이번 문제의 경우 1)경로는 반드시 존재하고 2)행의 개수는 항상 2라는 조건 덕분에 문제가 까다롭지 않았다. [0][i] 가 '#'이면 무조건 [1][i]는 '.'일 것이기 때문에, 푸는 방법 자체는 백트레킹이었음에도 불구하고 방문 표시를 하지 않고 지나가도 괜찮다. 바꿔도 무방한, 즉 최단경로에 속하지 않는 '.'의 개수를 구하는 것이 문제였으므로 전체에서 (최단경로+'#'개수)를 빼면 답을 구할 수 있다. → M*2 - (거쳐간 '.'개수 + '#'개수) 여기서 놓치면 안되는 부분! 출발 위치는 [0][0] 과 [1][0] 두 개다. 난 이걸 놓쳐서 자꾸 애먹었다... 만약 입력으로 5 .#... ..... 가 들어온다면[0][0]에서 출발할 경우 → 출력.. 2022. 3. 19.