코딩 테스트 문제 풀이

Do it 알고리즘 코딩 테스트 - 13번

김복칠 2023. 11. 3. 10:04

문제.

https://www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net


코드.

n = int(input())
a = []

for i in range(n):
    a.append(int(i)+1)

while len(a) > 1:
    a.pop(0)
    a.append(a[0])
    a.pop(0)

print(a)
입력 값 출력 값
6 4

해석 및 풀이.

★ 이 문제는 임의의 수 N을 입력받고 그 만큼의 숫자를 1부터 차례대로 나열한 뒤 맨 앞자리 숫자는 지우고 그다음 숫자는 뒤로 옮기고 다음 숫자는 지우고를 반복한다. 그렇게 해서 가장 마지막에 남는 숫자를 출력하는 프로그램을 만드는 문제입니다.

n = int(input())
a = []

먼저 임의의 숫자 N을 입력받는 input() 함수를 입력해줍니다. 그리고 N만큼 나열한 숫자들을 넣어줄 빈 리스트 a 를 만듭니다. 

for i in range(n):
    a.append(int(i)+1)

그리고 입력 받은 숫자를 1부터 리스트에 넣어주어야 하기 때문에 반복문을 1부터 시작하게끔 돌려서 리스트 a 에 넣어줍니다.

while len(a) > 1:
    a.pop(0)
    a.append(a[0])
    a.pop(0)

print(a)

리스트 a 에 1부터 N까지 차례대로 나열되게 입력이 되었다면 하나의 숫자만 남기 전까지 반복문을 돌려주는데 맨 앞자리는 지우고 그 다음 수는 맨 뒤로 붙여주고 붙은 그 숫자는 다시 지우는 방법으로 한 사이클을 돌립니다. 예를 들어 리스트 [1,2,3,4,5] 가 있을 때 1은 지우고 그 다음 수 2 는 맨 뒤로 붙여줍니다. 그러면 [2,3,4,5,2] 가 됩니다. 이때 맨 앞의 2는 역할을 다 했기 때문에 pop() 함수로 지워줍니다. 이렇게 되면 한 사이클을 돌릴시 [3,4,5,2] 가 됩니다. 이 과정을 단 하나의 수만 남을때까지 반복해 줍니다.

print(a)

마지막으로 리스트 a 에 입력된 값을 print로 출력해줍니다.