분류 전체보기 753

[백준] 11729 하노이탑 이동 순서 파이썬 풀이 (재귀)

코드 def hanoi(disk, start, mid, end): if disk == 1: print(start, end) else: hanoi(disk - 1, start, end, mid) print(start, end) hanoi(disk - 1, mid, start, end) total_disk = int(input()) total_mvmt = 0 for disk in range(total_disk): total_mvmt = total_mvmt * 2 total_mvmt += 1 print(total_mvmt) hanoi(total_disk, 1, 2, 3) 풀이 하노이탑 옮기기의 원리이다 5개의 탑을 3번으로 옮기려면 일단 4개를 중간으로 옮겨놓고 5번을 3번으로 옮긴다음 중간에 있던 4개를 3..

[WIL] 항해 99 2주차 회고록 (21.06.13~ 21.06.20) 재밌는 알고리즘 스터디!

총평 이번 주간은 알고리즘 문제 풀기 주간이었다. 총 60문제까지 주어진 문제가 있고 40문제까지 필수로 풀어보는 주간이다. 처음에는 백준에서 문제를 풀 때 입력을 어떻게 받는지도 몰라서 어리둥절했다. 이제는 입력 받는법 잘!안다! 첫날에 혼자 열심히 풀긴 푸는데 조가 없으니까 집중력이 확실히 떨어졌다. 아무래도 쉬고 싶을때 쉴 수 있으니까 마음껏 쉬기도 했고 이해하기 어려운 문제를 같이 고민해볼 조원이 없어서 힘들었다. 마침 둘째날에 항해에서 스터디를 열어준다고 해서 바로 신청했다. 그리고 조원들을 만났는데 정말 말이 잘통하고 스터디도 재밌게 진행했다. 항해에서 제안했던 스터디 방식과는 다르게 우리는 한 문제를 1시간이나 1시간 반동안 같이 풀어보고 만나서 풀었다면 코드와 풀이 방식을 공유하고 못 푼 ..

TIL 2021.06.20

[백준] 2805 나무자르기 파이썬 풀이 (이분탐색)

코드(PYPY3) n, m = map(int, input().split()) tree_list = list(map(int, input().split())) cut_min = 0 cut_max = max(tree_list) result_h = 0 while cut_min h: get += tree-h # 나무를 충분히 가져갔다. 절단기를 올려보자. if get >= m: result_h = h cut_min = h + 1 else: # 나무가 부족하다. 절단기를 내려야겠다. cut_max = h - 1 print(result_h) 풀이 처음에 이해가 안갔던 점은 왜 min을 0부터 시작하는지였다. 나무 높이 중에 가장 작은걸로 하면 안되나 했는데 나무 높이가 다 똑같을 수도 있기때문에 0으로 min을 설정..

[백준] 1929 소수 구하기 파이썬 풀이 (기본수학2)

코드 x, y = map(int, input().split()) for i in range(x, y+1): if i == 1: #1은 소수가 아뉘지! continue for j in range(2, int(i** 0.5)+1 ): if i%j==0: break else: print(i) 풀이 소수는 자신과 1밖에 약수가 없는 수이다. 그럼 모든 수를 돌면서 나누어 떨어지는 수가 있는지 없는지 보면 된다! 그런데 꼭 모든 수를 봐야할까! 해당 수의 제곱근까지만 나눠보면 된다. 약수는 대칭으로 이루어져있기 때문에 (예) 12의 약수는 1 2 3 4 6 12 / 1*12 , 2*6, 3*4 로 대칭 25의 약수는 1 5 25 / 1*25 , 5*5 로 대칭 제곱근 보다 같거나 작은 수까지만 나눠보고 나누어 떨..

[백준] 10250 ACM호텔 파이썬 풀이 (기본 수학1)

코드 num = int(input()) for i in range(num): H,W,N = map(int,input().split()) count = 1 while N>H : N = N-H count += 1 #방 호수 # print(N, count) if count2호->3호 .. 이렇게 넘어가야한다 손님이 20번째 손님이면 6번째 손님까지 1호/ 7~12번째 손님까지 2호/ 13~18번째 손님까지 3호라인/ 19~ 번째 부터 4호라인에 가야하고 19번부터 4호라인 시작이므로 20번째 손님은 204호에 가야한다 여기서 치면 N은 2가 남아있을 것이고 count는 4가 되어있겠다. count가 10이하라는 것은 방 호수가 9호까지라는 뜻이다. 1자리 수일때는 109 108호 처럼 0이 중간에 붙어야하니까..

[백준] 2609 최대 공약수와 최소 공배수 파이썬 풀이 (정수론 및 조합론)

코드 A,B = map(int, input().split()) # 최대 공약수는 # 둘중에 작은 수와 큰수%작은수와의 최대공약수와 같다 # 작은 수가 0이 될때까지 반복한다. 그럼 큰 수가 최대 공약수이다. a,b = A,B while b!=0: a = a % b a, b = b, a gcd = a print(gcd) lcm = A * B//a print(lcm) 풀이 최대 공약수를 구하는 공식 둘중에 작은 수와 큰수와 작은수를 나눈 나머지와의 최대공약수와 같다 24와 18의 최대 공약수 = 18(작은수)와 6(24%18)의 최대 공약수 = 6(작은수)와 0(18%6)의 최대공약수 작은수가 0이 되면 그때 큰 수가 최대 공약수가 된다 최소 공배수는 주어진 수 하나는 그대로 곱하고 하나는 최대공약수로 나눠..

[백준] 1037 약수 파이썬 풀이 (정수론 및 조합론)

코드 num = int(input()) #개수 real = list(map(int,input().split())) real.sort() print(real[0] * real[-1]) 풀이 8의 약수는 1 2 4 8 인데 이 중에서 1이랑 8을 빼면 2 4가 남는다 8은 2*4로 이루어져있다. 12 으로 보자면 1 2 3 4 6 12 인데 이 중에서 1과 12를 빼면 2346이 남는다 12는 2*6이나 3*4로 만들 수 있다. 따라서 진정한 약수로 주어진 수들을 오름차순으로 정렬하고 첫번째 수와 마지막 수를 곱하면 원래 수가 나온다.

[백준] 2869 달팽이는 올라가고 싶다 파이썬 풀이 (기본 수학 1)

코드 up,down,tree = map(int, input().split()) snail = 0 #달팽이의 높이 day = 0 # while snail0: day = (tree-down)//(up-down)+1 else: day = (tree-down)//(up-down) print(day) 풀이 이 문제는 while문으로 풀면 시간 초과가 나온다 그래서 입력이 되자마자 바로 출력하도록 해야한다. 이해하기 되게 까다로운 문제였다. 하지만 이해해보자! 원래 문제로 따지자면 낮에2를 올라가고 밤에 1을 내려오고를 반복하다가 딱 높이에 도달하면 밤에 내려오지 않는다. 그런데 일단 그것을 고려하지말고 매일 2-1씩 올라간다고 치자 그럼 5(높이)에서 1(내려오는 만큼)을 뺀 것 까지 딱 올라가면 되는거다 왜냐 ..