일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sqoop
- OS
- global soop
- 애플 아카데미 후기
- StateObject
- 애플 디벨로퍼 아카데미 21주차 회고
- Apple Developer Academy @ POSTECH
- 네이버 치지직
- 숭실대
- react
- 소프트웨어분석및설계
- apple developer academy 후기
- Swift 문법
- swift문법
- useReducer
- 운영체제
- Swift 기능
- 데이터베이스 공부
- 치지직
- 앱 비교 프로젝트
- 데이터베이스
- 애플 디벨로퍼 아카데미
- 네이버 부스트캠프
- SWIFT
- 제앱소
- ObservableObject
- iOS 개발 오류
- Swift 디자인패턴
- ObservedObject
- 애플 디벨로퍼 아카데미 후기
- Today
- Total
사과하는 제라스
[백준 BOJ 1436번] 영화감독 숌 본문
목차
출처 : https://www.acmicpc.net/problem/1436
1. 문제
666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다.
하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.
종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.
따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다.
숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.
2. 입력
첫째 줄에 숫자 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.
2
3
6
187
500
3. 출력
첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.
1666
2666
5666
66666
166699
4. 풀이
문제를 딱 읽는 순간, 절실히 필요한 기능이 하나 있었다. 어떤 문자열 안에 특정 문자 혹은 문자열이 있는지 검사하는 기능을 원했다. 그래서 찾아본 결과 찾은 함수가 contains 함수이다. 해당 함수를 임의의 문자열에 대하여 사용한다면 그 문자열에 특정 문자열이 있는지 없는지 T/F 리턴값을 추출해낼 수 있었다.
이 문제를 풀어보자면...
1) 몇번째 영화 제목을 원하는지 입력받아서 N값에 넣어준다,
2) i값은 순차적인 숫자들을 비교하기 위해 for문처럼 1씩 증가시키는 변수로 쓰기 위해 0으로, count값은 카운팅 변수로 사용하기 위해 0으로 초기화해준다.
3) 1씩 증가하는 i값이 666을 포함한다면 count값을 1 증가시키고 만약 count값이 내가 찾고자 하는 순서의 영화 제목이라면 출력, 아닐 경우 계속 i를 증가시키면서 비교해나간다.
5. 소스코드
import java.io.*;
class Main{
public static void main(String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int i = 0;
int count = 0;
while(count != N){
if(Integer.toString(i).contains("666")) count++;
if(count == N){
System.out.println(i);
}
i++;
}
}
}
6. 배운 것
문제에서 쓰고 싶은 기능을 구현할 수 있는 String 클래스의 contains라는 함수를 사용해보았다. 이외에도 찾고자하는 문자의 위치를 나타내는 indexOf, 찾고자하는 정규표현식의 존재 여부를 알고자 하는 matches 함수를 배웠다.
[출처] : https://coding-factory.tistory.com/534
'JAVA 백준 알고리즘 문제풀이 > 브루트 포스' 카테고리의 다른 글
[백준 BOJ 2798번] 블랙잭 (0) | 2021.10.20 |
---|