21756번: 지우개
$N$은 1, 2, 4, 8, 16, 32, 64 중 하나이다. 즉, $N$은 1이거나, 2이거나, 2를 여러 번 곱한 수 중 하나이다.
www.acmicpc.net
문제
개의 칸에 부터 까지의 수들이 왼쪽부터 순서대로 저장되어 있다. 또, 각 칸은 왼쪽부터 부터 까지 순서대로 번호가 붙어 있다. 즉, 처음에는 각 칸의 번호와 각 칸에 저장된 수가 같다.
아래 그림은 일 때의 예이다.
다음 작업을 수가 정확히 하나가 남을 때 까지 반복한다.
(A) 홀수번 칸의 수들을 모두 지운다 (B) 남은 수들을 왼쪽으로 모은다.
제일 첫 작업의 (A) 단계가 끝나면 칸들의 상태는 다음과 같을 것이다.
(B) 단계가 끝나면 다음과 같을 것이다.
두번째 작업이 진행되면 칸들은 아래 두 그림과 같이 바뀔 것이다.
이제 수가 하나 남았으므로 작업은 더 이상 진행되지 않는다.
을 입력으로 받아 위와 같이 작업을 진행했을 때 마지막으로 남는 수를 계산하는 프로그램을 작성하라.
입력
첫 번째 줄에 정수 이 주어진다.
출력
마지막으로 남는 수를 한 줄에 출력한다.
제한
서브태스크
1 | 5 | 입출력 예제만이 주어짐. |
2 | 15 | |
3 | 30 | 은 1이거나, 2이거나, 2를 여러 번 곱한 수 중 하나이다. 은 1, 2, 4, 8, 16, 32, 64 중 하나이다. 즉, |
4 | 50 | 추가 제약 조건 없음 |
코드
n = int(input())
lst = [i for i in range(1, n+1)]
while len(lst) > 1:
new_lst = []
for i in range(1, len(lst), 2):
new_lst.append(lst[i])
lst = new_lst
print(lst[0])
배열에서 짝수번째 번호들만 뽑아서 새로운 배열을 만들고 이 배열을 다시 lst에 저장해준다. 이 과정을 lst의 길이가 1이 될 때까지 반복한다.
'문제풀이 > 구현' 카테고리의 다른 글
[Python/파이썬] 백준 9242번 폭탄 해체 (0) | 2024.01.12 |
---|---|
[Python/파이썬] 백준 1235번 학생 번호 (1) | 2024.01.02 |
[Python/파이썬] 백준 16935번 배열 돌리기 3 (0) | 2023.11.23 |
[Python/파이썬] 백준 10703번 유성 (1) | 2023.10.21 |
[Python/파이썬] 백준 17472번 다리 만들기 2 (0) | 2023.10.19 |