hahn

[백준 - JAVA] 4와 7 본문

코딩테스트 연습/백준(JAVA)

[백준 - JAVA] 4와 7

hahn 2021. 9. 19. 12:00
728x90
반응형

2877번: 4와 7 (acmicpc.net)

 

2877번: 4와 7

창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오.

www.acmicpc.net

더보기
import java.util.Scanner;

class Main{
    
    public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int input = sc.nextInt(),
			originPardon = 2;
		
		String str = "", str1;
		
		while(input > 0) {
			
			input -= originPardon;
			
			originPardon *= 2;
			
			str += "4";
			
		}
		
		str1 = Integer.toBinaryString(input + originPardon/2 - 1);
		
		for(int i = 0; i < str.length(); i++) {
			
			if(str.length() - i <= str1.length()) {
				
				if(str1.charAt(str1.length() - str.length() + i) == '1') {
					
					System.out.print("7");
					continue;
					
				}
				
			}
			
			System.out.print("4");
			
		}
        
    }
    
}

 

어떻게 할까 고민하다가

 

일단 조건문의 범위를 최대한 줄여보고자

 

초기 값을 만들고 4와 7로 바꿔보자고 생각했다.

 

초기 값을 만들었으니 이제 남는 값을 어떻게 처리할까 고민했는데

 

각 항은 4와 7로 이루어져 있으니

 

경우의 수를 생각해봤을 때,

 

그냥 2진수로 변환해서 1일 때는 7 0일 때는 4로 치환해주면 되겠다고

 

생각했다. 그렇게 코드를 짜 봤더니 성공했다.

 


블로그 작성하면서 생각해보니까

 

굳이 초기값 같은 거 안 잡아줘도

 

입력 값 2진수로 변환해서 해결해도 될 거 같다.

 

또한 charAt 비교 안 해도 replace로

 

0을 4로 1을 7로 바꿔도 될 듯??

728x90
반응형

'코딩테스트 연습 > 백준(JAVA)' 카테고리의 다른 글

[백준 - JAVA] 거듭제곱  (0) 2021.09.19
[백준 - JAVA] 걷다보니 신천역 삼 (Small)  (0) 2021.09.19
[백준 - JAVA] 최대 곱  (0) 2021.09.19
[백준 - JAVA] 최소공배수  (0) 2021.09.19
[백준 - JAVA] 조합  (0) 2021.09.19