내가 생각한 알고리즘
반복문을 돌려서 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 |