이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

백준 21756 - 지우개 (파이썬)

포렌식 & 개발 이야기 - Forensics & Development

백준 21756 - 지우개 (파이썬)

  • 2025.03.23 22:30
  • Programming/백준
글 작성자: pental

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

풀이

주어진 N개의 숫자가 1부터 N까지의 정수로 구성된 큐에서 특정 규칙에 따라 제거되며 마지막 남는 숫자를 출력하는 문제이다.

  1. 초기 큐 구성
    1. deque를 활용하여 1부터 N까지의 숫자를 큐에 추가한다.
  2. 반복적인 삭제 과정
    1. 큐의 길이가 1보다 클 동안 계속 반복한다
    2. 현재 큐의 길이를 n이라 할때, 처음부터 시작하여 짝수 번째 인덱스에 있는 원소를 제거한다.
    3. 홀수번째 인덱스에 있는 원소는 큐의 뒤로 이동시킨다.
  3. 마지막 남은 숫자 출력

시간복잡도 분석

  1. 모든 원소를 한번씩 탐색함 → O(N)

최적화 코드

이 문제의 패턴을 관찰하면, 2의 거듭제곱 형태로 숫자가 감소함을 알 수 있다.

즉, N이하의 가장 큰 2의 거듭제곱 수가 정답이 된다.

N = int(input())
power = 1
while power * 2 <= N:
power *= 2
print(power)

예를 들어

  • N = 6일 때 → 1 2 3 4 5 6 → 2 4 6 → 4 6 → 4
  • N = 10일 때 → 1 2 3 4 5 6 7 8 9 10 → 2 4 6 8 10 → 4 8 → 8

즉, 마지막 남는 숫자는 N 이하의 가장 큰 2^k 값.

코드

# 백준 21756 - 지우개
# 분류 : 큐
from collections import deque
N = int(input())
queue = deque()
for i in range(1, N + 1) :
queue.append(i)
while len(queue) > 1 :
n = len(queue)
for i in range(n) :
if i % 2 == 0 :
queue.popleft()
else :
queue.append(queue.popleft())
print(queue[0])
이 글은 (새창열림) 본 저작자 표시, 비영리 규칙 하에 배포할 수 있습니다. 자세한 내용은 Creative Commons 라이선스를 확인하세요.
Creative Commons
본 저작자 표시
비영리

'Programming > 백준' 카테고리의 다른 글

백준 25377 - 빵 (파이썬)  (0) 2025.03.25
백준 10800 - 컬러볼 (파이썬)  (0) 2025.03.24
백준 19941 - 햄버거 분배 (파이썬)  (0) 2025.03.22
백준 17608 - 막대기 (파이썬)  (0) 2025.03.21
백준 17286 - 유미 (파이썬)  (0) 2025.03.20

댓글

포렌식 & 개발 이야기 - Forensics & DevelopmentPental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

댓글을 사용할 수 없습니다.

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 백준 25377 - 빵 (파이썬)

    백준 25377 - 빵 (파이썬)

    2025.03.25
  • 백준 10800 - 컬러볼 (파이썬)

    백준 10800 - 컬러볼 (파이썬)

    2025.03.24
  • 백준 19941 - 햄버거 분배 (파이썬)

    백준 19941 - 햄버거 분배 (파이썬)

    2025.03.22
  • 백준 17608 - 막대기 (파이썬)

    백준 17608 - 막대기 (파이썬)

    2025.03.21
    https://www.acmicpc.net/problem/17608풀이여러개의 막대기가 일렬로 세어져 있을 때, 오른쪽에서 보았을때 보이는 막대기의 개수를 구하는 문제이다.막대기는 왼쪽에서 오른쪽으로 나열되어 있으며, 각 막대기의 높이가 주어진다.오른쪽에서 왼쪽을 바라볼 때, 더 높은 막대기가 나오지 전까지의 막대기만 보이게 된다.for i in range(N - 1, -1, -1): # 오른쪽에서 왼쪽으로 순회 if max_height 오른쪽에서 왼쪽으로 막대기 리스트를 탐색한다.만약 현재 막대기의 높이가 max_height 보다 크다면, 이는 새로운 보이는 막대기 이므로, count를 증가시킨다.max_height를 현재 막대기의 높이로 갱신한다.시간 복잡도 분석한번의 순회만 이용하므로 O(N…
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • Category (489)
    • Forensics (19)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (25)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (8)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (295)
      • C (10)
      • Python (11)
      • 백준 (241)
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

인기 글

공지사항

태그

  • 파이썬
  • axiom
  • 디지털포렌식
  • Forensics
  • 백준
  • pental
  • 프로그래머스
  • 포렌식
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.