1436번 문제 : 영화감독
1436번: 영화감독 숌
666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워
www.acmicpc.net
내가 생각한 알고리즘
반복문을 돌려서 6이 연속으로 나오는 수를 ArrayList에 하나씩 저장해놓고
입력한 수 번째의 값을 꺼내쓴다 !
근데 여기서 반복문을 얼마나 돌려야 할지를 잘 모르겠네
3/18 이어서 !
num을 입력받아 (n번째 수)
6을 세어줄 sixcount 선언
6이 3번 연속으로 들어간 수가 저장될 ArrayList 만듦. (배열로 저장 안 한 이유는 n번째 숫자가 저장될 공간이 몇 개나 필요할지 모르기 때문에)
char c : 숫자를 문자열로 바꿔서 한 자리씩 찢어서 연속으로 '6'이 세 번 나올 때만 collecsix 리스트에 저장할 거임
int i = 0; while문을 돌릴 거라서 0부터 증가해서 검증해줄 수 선언
while {문 안에
새로 숫자가 바뀌면 sixcount =0으로 초기화하고 시작. // 왜 해줬냐면 66 -> 67로 넘어갈 때 66 6을 6이 세번 나왔다고 인식해버려 32번째 줄 else에 안 걸려서
String str = Integner.toString(i);
i++; // i를 증가해가면서 문자열로 바꿔서 str에 넣음
for{ // str 문자열 길이만큼 반복 j변수 0~str.length()
c = str.charAt(j); // 문자열을 한 글자씩 char로 바꿔서 c에 넣음
if( c == '6') //한 자리가 6이면
sixcount ++; //6카운트 1 증가
if(sixcount ==3) //6카운트가 3이면
collectsix.add(str); // arraylist 맨 뒤에 값 쌓아줌. index 값은 지정해주지 않았음.
else //6이 아니면
sixcount = 0; 그동안의 sixcount 0으로 만듦. 근데 딱히 필요없을 것 같다. 저 위에 초기화문이 있어서
+ 오 ㄴㄴㄴㄴ 없으면 안 된다. 저 위에 sixcount = 0;은 한 숫자에서 다른 숫자로 바뀔 때 6카운터를 초기화 해주는 거고 얘는 한 숫자 내에서 연속된 6이 나오지 않으면 초기화 해주는 거라 없애면 안 됨.
} //for문 끝
if(collectsix.size() > num)
break;
//while문을 빠져나가 줄 조건문. 여기를 되게 생각많이 해봤는데 뭐 collectsix.get(~~)이런식으로 첨엔 구하려고 했었는데 num번째의 값이 있는 것을 확인하려면 애초부터 num번째의 값이 있어야 접근이 가능하기 때문에 에러가 났음.
그래서 size로 접근했는데 size는 요소의 총 갯수가 num(내가 구하려는 인덱스)보다 많으면 빠져나간다
저기를 >=으로 해도 되긴하는데 시간이 더 오래걸림 굳이 필요 x
} //while문 끝
System.out.println(collectsix.get(num-1)); //num을 인덱스로 리스트에서 값을 가져올 건데 리스트는 0번째 부터 시작하니까 num이 3이라면 0 1 2 순서로 인덱스 2의 값을 얻고싶은 거임. 따라서 num-1을 해줘야함.
끗 !
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int sixcount=0;
List <Integer>collectsix= new ArrayList<>();
char c=' ';
int i=0;
while(true) {
sixcount=0;
String str = Integer.toString(i);
i++;
for(int j=0;j<str.length();j++) {
c = str.charAt(j);
if(c=='6') {
sixcount++;
if(sixcount == 3) {
collectsix.add(Integer.parseInt(str));
}
}
else
sixcount = 0;
}
if(collectsix.size()>num)
break;
}
System.out.println(collectsix.get(num-1));
}
}