• 코드

실패 코드 : 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();
	}
}

+ Recent posts