알고리즘/코딩테스트 문제 정리

[코딩테스트 합격자 되기] queue 활용

고래강이 2025. 1. 10. 21:19

코딩 테스트 합격자 만들기: 파이썬 편 190p

 


 

☄️ 문제 접근 및 내 생각

1. 리스트를 만들어서 빼고 더하고 빼고 더하고 하는 와중에 정해진 k값에 빼기를 한 번 더 하게 되면 될 것 같다.
2. 리스트로하게 되면 시간이 더 많이 걸리니깐 deque로 해야한다는 것을 다시 상기함.

소요시간: 30분

 


 

🌈 파이썬 코드

from collections import deque

# 문제 15 요세푸스 문제
def solution_15(n, k):
    # people = deque([int(x) + 1 for x in range(n)])
    people = deque(range(1, n + 1))
    count = 1
    
    while len(people) > 1:
        if (count == k):
            people.popleft()
            count = 1
        else:
            people.append(people.popleft()) 
            count += 1
        print(people)
    return people.popleft()
  • 처음 구한 값인데 여기서 deque를 만드는 방식에서 잘못됬음 그래서 다시 사용법을 깨닳았음
  • 책의 답지에서는 while문의 내용이 다르지만 뭐 이것도 나쁘지 않겠지?

 


 

🌈 자바스크립트 코드

function solution(n, k) {
  const people = Array.from({ length: n }, (_, index) => index + 1);
  let count = 1;
  while (people.length > 1) {
    if (count === k) {
      people.shift();
      count = 0;
    } else {
      people.push(people.shift());
    }
    count++;
  }
  return people[0];
}