본문 바로가기
알고리즘/백준

1436번 문제 : 영화감독

by son_i 2023. 3. 18.
728x90

1436번: 영화감독 숌 (acmicpc.net)

 

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));
	}
}

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

1874번 문제 : 스택 수열  (0) 2023.03.19
1654번 문제 : 랜선 자르기  (0) 2023.03.19
1259번 문제 : 팰린드롬수  (0) 2023.03.17
1018번 문제 : 체스판 다시 칠하기  (0) 2023.03.16
10250번 문제 : ACM호텔  (0) 2023.03.13