알고리즘 3

[프로그래머스] 예상 대진표 - Python

해당 문제는 대진표에서 대진을 하면서, A와 B가 몇 번째 붙는지를 찾는 문제다. A와 B는 무조건 계속 이긴다는 가정하고 있다. A와 B를 나누어서 결국 1, 2 혹은 3, 4 처럼 두 값의 차이가 하나 인 경우를 찾으면 된다. def solution(n,a,b): for i, _ in enumerate(range(n//2)): if abs(a-b) == 1 and (a//2) != (b//2): return i + 1 a = round(a/2 + 0.1) b = round(b/2 + 0.1) a//2 와 b//2가 같은 경우는 2, 3 혹은 4, 5 와 같은 경우다. 해당 경우는 다음 경기에 붙기 때문에 그 결과를 제외하고 처리를 하면 된다.

Python/Algorithm 2023.09.23

[프로그래머스] 점프와 순간 이동 - Python

해당 문제는 역순으로 생각하는 것이 키 포인트다. 마지막 예제 5000을 예시로 들면, 5000 -> 2500 -> 1250 -> 625 -> 624 -> 312 -> 156 -> 78 -> 39 -> 38 -> 19 -> 18 -> 9 -> 8 -> 4 -> 2 -> 1 -> 0 굵은 숫자를 보면, 1번씩 이동해야되는 경우가 발생한다. 즉, 나누어서 2로 떨어지지 않으면 K칸을 점프해야 된다는 것이다. def solution(n): ans = 1 while n != 1: if n % 2 == 0: n /= 2 else: n -= 1 ans += 1 return ans

Python/Algorithm 2023.09.16

[프로그래머스] 달리기 경주 - Python

문제를 살펴보면 단순히 역전한 결과를 스왑(swap)하면 되지 않을까 라고 생각해서, list를 이용하여 아래와 같이 문제를 풀어보았다. # 시간초과 def solution(players, callings): for calls in callings: idx = players.index(calls) values = players.pop(idx) players.insert(idx-1, values) return players def solution(players, callings): for calls in callings: idx = players.index(calls) players[idx-1], players[idx] = players[idx], players[idx-1] return players Ru..

Python/Algorithm 2023.08.24
반응형