본문 바로가기
  • 시 쓰는 개발자
알고리즘/코테 스터디 (2024)

백준 1158

by poetDeveloper 2024. 7. 9.
반응형

💡문제 분석 요약

  • N명의 사람이 있고, K번째 사람을 제거한다. 제거되면 그 다음 K번째 사람을 다시 제거한다.
  • 제거된 사람은 list에서 빠지게 된다.
  • 최종 1명이 남을 때 까지 제거한다.

💡알고리즘 설계

  • 원형큐를 사용해야될 것 처럼 보였는데, 일단은 list를 사용한 큐로 풀었다.
  • 나머지 계산이 들어갈 것으로 보이고, len(list)를 나누는 것을 pop하고 나서 할지, 이전에 할지 생각해보면 될 것 같다.

💡코드

n, k = map(int, input().split())
lst = [x+1 for x in range(n)]

removed_people = [] # 제거된 사람 모임
remv = 0 # 제거될 사람

for i in range(1, n+1):
    remv += (k-1)
    if remv >= len(lst):
        remv %= len(lst)
    removed_people.append(lst[remv])
    lst.pop(remv)

print("<",', '.join(map(str, removed_people)),">", sep="")

💡시간복잡도

  • N명의 사람에 대해 for문을 돌리고, 그 안에서는 if 외에 별다른 조건이 없으므로 O(N)이 될 것으로 예상된다.

💡 틀린 이유

  • pop을 어디서 해야하는지 헷갈렸다. 처음부터 나머지 계산으로 풀어야겠다고 생각은 했는데 이를 pop 해주고 해야하는지, pop하기 전에 해야하는지 헷갈렸다.
  • 또한 if로 비교할 때 등호를 안써서 틀렸다. 시작이 0이기 때문에 등호를 붙여야 했는데 이를 빼먹었다.
  • 최종 답안 표기 하는 방법을 몰라서 틀렸다. 이는 인터넷을 찾아 join으로 풀었는데, 처음에는 하나하나 for문으로 출력했는데 너무 코드가 이상해져서 인터넷을 참고하여 작성하였다.

💡 틀린 부분 수정 or 다른 풀이

  • while을 사용하여 len가 0보다 클때까지 지속한 풀이도 가능했다.

💡 느낀점 or 기억할정보

  • join 사용법 익히기
  • 비교할 때 항상 등호가 들어가는지 안들어가는지 생각해본 후 해야한다.
반응형

'알고리즘 > 코테 스터디 (2024)' 카테고리의 다른 글

9012 괄호  (0) 2024.07.11
Programmers 다리를 지나는 트럭  (0) 2024.07.10
코테 삽질일지 (1)  (0) 2024.07.09
오답노트 양식 📒  (0) 2024.07.09
백준 10828  (0) 2024.07.08