STUDY/Algorithm

[백준] 1242 소풍 파이썬

sinawi95 2021. 3. 27. 12:05
728x90

www.acmicpc.net/problem/1242

 

1242번: 소풍

첫째 줄에 N, K, M가 주어진다. N과 K는 5,000,000보다 작거나 같은 자연수이고, M은 N보다 작거나 같다.

www.acmicpc.net

N, K, M = map(int,input().split())
result = 0
tmp_m = M
while result < N:
    result += 1
    if K % (N - result + 1) == tmp_m % (N - result + 1):
        break
    if K == tmp_m:
        break
    else:
        tmp_m -= K
        while tmp_m <= 0:
            tmp_m += (N - result + 1)

print(result)

하지만 다시 골드3이 내 앞을 가로 막았다. 어제 두시까지 했었나...?

확실히 잠을 자고 오니 머리가 잘돌아간다. 그래봤자 Trial & Error 방식으로 풀긴했지만 ㅋㅋ

처음에는 원형큐로 풀었는데 메모리 초과가 떠서 다른 방향으로 생각했다.

위에 작성한 코드는 원소 직접 돌리는 것이 아닌 위치를 계속 갱신시키는 코드이다.

원소의 자리값을 tmp_m 으로 두고 K자리의 값이 빠질때 마다 갱신시킨다.

0 이하로 내려가면 뒤로 보내는데, 이때 N-result + 1 은 해당 단계에서의 남은 원소의 갯수이다.

이렇게 까지 구하고 마지막 하나가 모자랐는데 남은 원소의 갯수가 K 보다 작을때 값들을 구하지 못했다.

 여기에서 모든 시간을 다 쓴것 같다.

이건 잠을 자고 오니 조금 쉽게 구했는데

K값을 원소로 나눈 나머지랑 tmp_m의 값을 원소로 나눈 나머지가 같은 경우가 같으면 break 시켜주면된다.

두번째 if 문이랑 같은데 원형 큐의 개념을 도입한것이다. (다시보니 두번째 if문도 중복이다ㅋㅋ)


잠의 중요성을 알게된 문제이다.

이 문제는 머리를 더 써야하는것같다.

깨고나니 수학 문제를 푼것같아서 기분이 좋다.

 

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 2660 회장뽑기 python  (0) 2021.03.28
[백준] 2636 치즈 python  (0) 2021.03.28
[백준] 12904 A와B python  (0) 2021.03.26
[백준] 12967 pqr python 못풀었다.  (0) 2021.03.26
[백준] 12871 무한 문자열  (0) 2021.03.26