- 코드
실패 코드 : contains를 통해 해당 문자가 없으면 count를 해주며 count가 K랑 같아졌을 때, 출력 후 반복문을 빠져나오는 식으로 하였다. 결과는 메모리초과
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int K = Integer.parseInt(br.readLine());
int count = 0;
int i=1;
while(true) {
if(!Integer.toString(i).contains("0")
&& !Integer.toString(i).contains("1")
&& !Integer.toString(i).contains("2")
&& !Integer.toString(i).contains("3")
&& !Integer.toString(i).contains("5")
&& !Integer.toString(i).contains("6")
&& !Integer.toString(i).contains("8")
&& !Integer.toString(i).contains("9"))
count++;
if(count==K) {
System.out.println(i);
break;
}
i++;
}
}
}
성공 코드 : 4와 7로만 나타내는 K번째 수를 입력하면 된다. 여기서 4와 7를 0과 1로만 바꿔서 생각하면 2진수와 같다.
약간 다른점은 3일때 00이 아닌 10이 된다.
해결법은 입력한 수를 +1 한 뒤 2진수로 바꾸면 3일때 100이 된다.
여기서 맨 앞에 1을 제외시키면 00이 되어서 3일때 44로 정상적으로 바뀌게 된다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = Integer.toBinaryString(Integer.parseInt(br.readLine())+1).replace('0','4').replace('1', '7');
for(int i=1;i<s.length();i++)
bw.write(s.charAt(i));
bw.flush();
bw.close();
}
}
'algorithm' 카테고리의 다른 글
[JAVA] 백준 1541번 : 잃어버린 괄호 (0) | 2020.08.20 |
---|---|
[JAVA] 백준 2556번 : 별 찍기 - 14 (0) | 2020.08.20 |
[JAVA] 백준 2750번 : 수 정렬하기 (0) | 2020.08.19 |
[JAVA] 백준 1790번 : 수 이어 쓰기 2 (0) | 2020.08.19 |
[JAVA] 백준 5567번 : 결혼식 (0) | 2020.08.19 |