링크
백준 1242 소풍
진짜 너무나도 많은 시간을 쏟은 문제이다.
이런문제를 풀 때면 내가 수학에는 별로 재능이 없나? 란 생각을 하게 된다.
실패한 코드의 아이디어는 지워진 사람 다음을 1로 바꿧을 때 동호의 위치를 계산해 주는 아이디어 였는데 방법은 맞는데 풀리질 않는다. 혹시 어디가 잘못된건지 보이신다면 부디 알려주세요...ㅠ
성공한 코드를 동호의 위치와 지워지는 사람의 위치를 보고 동호의 위치가 더 크면 1을 줄여주면서 계산하는 방법으로 풀었다.
#사람, 움직이는수, 동호
N, K, M = map(int, input().split())
kill = K % N #만약 K가 N보다 클경우 다시 1부터 반복하게 만들어야 하므로 나머지 계산
if kill == 0: #만약 K가 N의 배수일 경우 마지막값을 죽이는데 값은 0이 나오므로 보정필요함
kill = N
#지워진 숫자 다음을 1로 했을 때 동호의 위치를 계산, 반복
for i in range(1, N + 1):
if M == kill or N == 1: #동호의자리가 지워질 자리와 같거나, 동호만 남았을 때
print(i)
break
elif M > kill:
M -= kill #지워진 사람 다음을 1로 했을 때 동호의 위치
N -= 1 #사람이 한명 줄어듦
elif M < kill:
M = N + M - kill #이경우 M - K는 음수값, 뒤로 몇번째에 있다고 계산하면 됨
while M <= 0:
M = M + N
N -= 1
아니왜안돼 ㅡㅡ
N, K, M = map(int, input().split())
M -= 1 #동호의 인덱스
start = 0
for i in range(1, N + 1):
removed = (start + K - 1) % N
if removed == M:
print(i)
break
if removed < M:
M -= 1
if removed > M:
pass
start = removed
N -= 1