freeParksey
밥세공기
freeParksey
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • JAVA (32)
      • 자바스터디 (21)
      • Java in action (6)
      • OOP (1)
      • test (2)
    • 알고리즘 문제 (51)
      • 백준 (49)
    • C (Atmega128) (7)
    • 인공지능 (11)
    • 운영체제 (8)
    • 디자인패턴 (5)
    • 잡다한것 (2)
    • 사용기 (3)
      • 도커 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dto 변환
  • 자바스터디
  • 상속
  • 백트랙킹
  • 우아한테크코스
  • 자바
  • 집합과 맵
  • Python
  • 후기
  • 우테코
  • 분류
  • 딥러닝
  • 3주차
  • Thread #JVM #자바스터디 #
  • 그리드
  • 동작 파라미터화
  • Collection
  • 알고리즘
  • 백준
  • 운영체제
  • Iterator
  • 스트림
  • 백트래킹
  • java
  • 재귀기초
  • dto 변환 위치
  • 프리코스
  • generic
  • Thread 동작
  • 동적계획법

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
freeParksey
알고리즘 문제/백준

[백준 - 1436] 영화감독 숌

알고리즘 문제/백준

[백준 - 1436] 영화감독 숌

2022. 4. 26. 02:40

영화감독 숌

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 55586 27232 22090 48.875%

문제

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다.

하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.

따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다.

숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.

입력

첫째 줄에 숫자 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

예제 입력 1 복사

2

예제 출력 1 복사

1666

예제 입력 2 복사

3

예제 출력 2 복사

2666

예제 입력 3 복사

6

예제 출력 3 복사

5666

예제 입력 4 복사

187

예제 출력 4 복사

66666

예제 입력 5 복사

500

예제 출력 5 복사

166699

문제 분석

  • 1666, 2666, 3666, 4666, 5666, 6661, 6662 ... 이런식으로 간다

해결

  • 11~14줄 : 문자의 뒤 부터 검사하여 앞에 값을 올릴지, 뒤에 값을 올릴지 결정
  • 16~19줄 : 1666 2666 처럼 앞에 숫자 올린다.
  • 21~26줄 : 뒷자리 값을 건너띄며, 사이에 값이 있으면 끝낸다.
    • Ex) 5666에서 7666으로 넘어가면 6660~6669인 10을 더하여 7666으로 넘어가지만 그 사이값에 원하는 값이 있다면 해당값까지만 더한다. 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
N = int(input())
 
index = 1
six_count = 0
num = 0
str_n = ""
result = 0
while index <= N:
    str_n = str(num)
    six_count = 0
    for s in str_n[::-1]:
        if s != '6':
            break
        six_count += 1
    
    if six_count == 0:
        index += 1
        num += 1
        continue
    
    plus = 10**six_count
    if index + plus <= N:
        index += plus
        num += 1
    else:
        break
 
if six_count == 0:
    str_n = ("" if num == 1 else str(str_n)) + "666"
    result = int(str_n)
elif six_count > 3:
    str_n = str_n[:-six_count] + str_n[-six_count:].replace(str_n[:-six_count], "0"*six_count) + "000"
    result = int(str_n) + N - index
else:
    str_n = str(num) + '6'*(3-six_count) + '0' * (six_count)
    result = int(str_n) + N-index
print(result)

'알고리즘 문제 > 백준' 카테고리의 다른 글

알고리즘 - 집합과 맵(14425 문자열 집합)  (0) 2022.08.06
알고리즘 - 집합 (10815 숫자 카드)  (0) 2022.08.06
[백준 - 1018] 체스판 다시 칠하기  (0) 2022.04.26
[백준 - 7568] 덩치  (0) 2022.04.26
[백준 - 2798] 블랙잭  (0) 2022.04.26
  • 문제 분석
  • 해결
'알고리즘 문제/백준' 카테고리의 다른 글
  • 알고리즘 - 집합과 맵(14425 문자열 집합)
  • 알고리즘 - 집합 (10815 숫자 카드)
  • [백준 - 1018] 체스판 다시 칠하기
  • [백준 - 7568] 덩치
freeParksey
freeParksey
Github: https://github.com/parksey

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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