본문 바로가기

개발공부/문제풀이

백준 21756 : 지우개 파이썬(python)

728x90
반응형

지우개 성공서브태스크

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 512 MB 1827 1062 788 59.788%

문제

 N개의 칸에 1 부터 N 까지의 수들이 왼쪽부터 순서대로 저장되어 있다. 또, 각 칸은 왼쪽부터 1 부터 N까지 순서대로 번호가 붙어 있다. 즉, 처음에는 각 칸의 번호와 각 칸에 저장된 수가 같다.

아래 그림은 N=7일 때의 예이다.

다음 작업을 수가 정확히 하나가 남을 때 까지 반복한다.

(A) 홀수번 칸의 수들을 모두 지운다 (B) 남은 수들을 왼쪽으로 모은다.

제일 첫 작업의 (A) 단계가 끝나면 칸들의 상태는 다음과 같을 것이다.

(B) 단계가 끝나면 다음과 같을 것이다.

두번째 작업이 진행되면 칸들은 아래 두 그림과 같이 바뀔 것이다.

이제 수가 하나 남았으므로 작업은 더 이상 진행되지 않는다.

 N을 입력으로 받아 위와 같이 작업을 진행했을 때 마지막으로 남는 수를 계산하는 프로그램을 작성하라.

입력

첫 번째 줄에 정수 N이 주어진다.

출력

마지막으로 남는 수를 한 줄에 출력한다.

예제 입력 1 복사

1

예제 출력 1 복사

1

예제 입력 2 복사

2

예제 출력 2 복사

2

예제 입력 3 복사

5

예제 출력 3 복사

4

 

앞쪽에서부터 홀수번째를 지웠더니 앞으로 리스트가 몰리면서 원하는 수가 아닌 다른 수를 지우게 된다.

그래서 뒤쪽부터 지우기 위해 reversed 함수를 이용했다

range() 범위에 3가지가 들어가는 것은

range(처음, 끝, 간격)을 의미 하는 것이다

range(0, 7, 2) 라면 0부터 6까지 2칸씩 띄워서 라는 의미이다.

그래서

for i in range(0,7,2):
    print(f'원래 : {i}')

for i in reversed(range(0,7,2)):
    print(f'뒤집어서 : {i}')

이렇게 코드를 비교해보면 보기 쉽다

출력결과

원래 : 0
원래 : 2
원래 : 4
원래 : 6
뒤집어서 : 6
뒤집어서 : 4
뒤집어서 : 2
뒤집어서 : 0

이 원리를 알고 while 문을 사용해서

주어진 list 의 길이가 1이 될때까지 for문을 사용해 list의 요소를 remove()함수를 이용해 제거해준다

 

나의 코드

n = int(input())

num_list = []

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

print(num_list)

while len(num_list) > 1:
    for i in reversed(range(0, len(num_list), 2)):

        print(f'numlist = {num_list}')
        print(i)
        num_list.remove(num_list[i])
        print(f'result = {num_list}')
        print('-'*50)
result = num_list[0]

print(result)

 

출력 결과

7 #입력한 값
[1, 2, 3, 4, 5, 6, 7]

numlist = [1, 2, 3, 4, 5, 6, 7]
6
result = [1, 2, 3, 4, 5, 6]
--------------------------------------------------
numlist = [1, 2, 3, 4, 5, 6]
4
result = [1, 2, 3, 4, 6]
--------------------------------------------------
numlist = [1, 2, 3, 4, 6]
2
result = [1, 2, 4, 6]
--------------------------------------------------
numlist = [1, 2, 4, 6]
0
result = [2, 4, 6]
--------------------------------------------------
numlist = [2, 4, 6]
2
result = [2, 4]
--------------------------------------------------
numlist = [2, 4]
0
result = [4]
--------------------------------------------------
4
728x90
반응형