-
[백준/BOJ] 1436번 : 영화감독 숌 (JAVA / 자바)백준 2022. 2. 26. 17:30
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1436
- 문제 -
난이도 실버 5 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
처음에 문제를보고 666부터 1666, 2666 나아간다고?라고 생각해서 그럼 14번째는 14666인가 했지만 예제를 보고 다시 생각해봤다.
조금만 나열해보겠다. 666 1666 2666 3666 4666 5666 에서 다음은 6666이 아니다. 왜냐하면 6이 3개이상이 연달아 나올때 작은 수들을 구해야하기 때문에 다음에 5666다음으로 올 값은 6660이 된다. 6666이 올 줄 알았지만 6666보단 6660이 작으면서 조건도 충족하기 때문에 그렇다. 다음은 6661 6662 6663 이렇게 간다. 이 부분을 주의하고 코드를 짜면 된다.
입력값 N을 받고, 666이 들어간 값들중 N번째에 오는 값을 구한다.
N이 1일떄 오는 값은 666이기때문에 666이 저장된 정수형 변수를 만들고, 1씩 증가시킨다.
매번 정수형 변수를 문자열 변수로 형변환해서, 연달아 6이 3개가 오는지 확인하고, 올 경우 N에서 1을 뺀다.
N이 0이 될때까지 반복하면 0이될때 값이 곧 정답이 될 것이다. 변수에 저장된 값을 출력하자.
코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public 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 first = 666; while(true) { String S = String.valueOf(first); for(int i = 0; i < S.length() - 2; i++) { //6이 등장한 인덱스값부터 뒤로 2개 더 6이 온다면 N에 -1하고 반복문 종료 if(S.charAt(i) == '6' && S.charAt(i + 1) == '6' && S.charAt(i + 2) == '6') { N--; break; } } if(N == 0) break; first++; } System.out.println(first); } }
-결과-
contains 함수가 있다. 코드를 짧게 할 수 있는 매우 좋은 함수이다. 좀 더 간결하게 하고싶으신 분은 그걸 사용하면 된다.
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1874번 : 스택 수열 (JAVA / 자바) (0) 2022.02.27 [백준/BOJ] 1654번 : 랜선 자르기 (JAVA / 자바) (1) 2022.02.26 [백준/BOJ] 9095번 : 1, 2, 3 더하기 (JAVA / 자바) (0) 2022.02.26 [백준/BOJ] 11399번 : ATM (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 15903번 : 카드 합체 놀이 (JAVA / 자바) (0) 2022.02.25