풀이방법 및 문제점
2022.11.22
사용한 방법은 다음과 같다.
0부터 9까지의 숫자가 담겨있는 해시셋을 선언한다.
수열에 특정 숫자가 나타날 때마다 그 숫자를 해시셋에서 remove()한다.
해시셋이 텅 비게 되면 그 시점의 k를 출력한다.
형변환의 번거로움을 줄이기 위해 각 숫자는 int나 long이 아닌 Character형으로 하였다.
완벽한 풀이법이라고 생각했는데 33퍼센트에서 자꾸 틀렸습니다를 받는다.
무엇이 문제지...?
친구가 한 것처럼 boolean 배열이 모두 true가 되었을 때 정답을 확정하는 코드도 짜보았는데, 똑같이 33퍼센트에서 틀렸습니다를 받았다.
이걸 보니 풀이법 자체가 문제가 아닌 것 같다. 친구가 했을 때 정답 처리를 받은 코드를 내 식으로 짜보니 오답 처리가 되었기 때문이다! 내가 코드로 구현하는 과정에서 실수를 하여 특정 테스트케이스를 놓치고 있는 것 같다... 대체 뭘까? 너무 간단한 문제라 알아내기가 더 어렵다.
초기화가 문제인가?
아니다. n, k, 해시셋 모두 매 입력값마다 잘 초기화해주고 있다.
입력을 잘못 받아오고 있나?
아니다. 놓치는 입력값도 없고, 입력이 더이상 들어오지 않을 때까지 while문이 돌도록 잘 해놓았다.
자료형이 문제인가?
아니다. 숫자들은 long으로 잘 선언해서 범위 초과가 일어나지 않았고, 숫자와 문자간 형 불일치도 없다.
k의 값 증가를 잘못 해주고 있나?
아니다. 초기값을 0으로 설정해준 뒤, 각 계산의 첫머리에서 1씩 증가하도록 하였다. 올바르게 증가하고 있다.
정답 k를 구하는 타이밍이 틀렸나?
아니다. 계산의 첫머리에서만 k가 1 증가하고, 그렇게 증가된 k로 한 계산 때문에 HashSet이 텅 비면 즉시 현재의 k를 출력하게 해놓았다. 그럼 올바른 정답 값이 나온다.
아... 문제가 무엇인지 알아냈다...
정답 k를 출력할 때에
println() 을 써야 하는데 print() 를 써서 틀린 거였다... 하...........................
코드
Java(2022.11.22)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = null;
while((input=br.readLine()) != (null)) {
long n = Long.parseLong(input);
HashSet<Character> hs = new HashSet<Character>();
for(int i=0; i<10; i++) hs.add((char)(i+'0'));
long k = 0;
while(true) {
k++;
String str = Long.toString(k*n);
for(int i=0; i<str.length(); i++) hs.remove(str.charAt(i));
if(hs.isEmpty()) break;
}
System.out.print(k);
}
}
}
'알고리즘 문제풀이 > 백준-오답노트' 카테고리의 다른 글
오답노트 #17298 : 오큰수 (0) | 2023.01.17 |
---|---|
오답노트 #10971 : 외판원 순회 2 (0) | 2022.11.29 |
오답노트 #7983 : 내일 할거야 (0) | 2022.11.09 |
오답노트 #16564 : 히오스 프로게이머 (0) | 2022.06.10 |
오답노트 #2370 : 시장 선거 포스터 (0) | 2022.06.08 |