본문 바로가기
백준 문제풀이

[백준] 2231번 풀이

by Dodledd 2024. 3. 12.

문제는 다음과 같다.

 

  1. 방법은 두 가지가 존재하는데%연산자와 / 연산자를 잘 이용해서 모든 경우의 수를 검사하면 된다.                               1부터 N까지 모든 경우의 수를 찾는 방법, 이 방법은 힌트만 남기고 넘어가겠다.                                                            %연산자와 / 연산자를 잘 이용해서 모든 경우의 수를 검사하면 된다.
  2. 알고리즘을 찾아서 이용하기.

 

필자는 2번을 이용해서 풀었다.

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 {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(bf.readLine()); //처음 입력받기
		int result = 0; //결과 담기
		
		for(int i = (n - (Integer.toString(n).length() * 9)); i<n; i++) { //i의 초기값을 자리수 *9만큼 빼주기
			int index = i;
			int sum = 0;
			
			while(index != 0) { //검사
				sum += index % 10;
				index /=10;
			}
			if(sum + i ==n) {
				result = i;
				break;
			}
		}
		bw.write(result+""); //아스키값 방지
		bw.flush();
	}
}

 

왜 i의 초기값을 입력받은 n의 자리수만큼 *9 해서 빼주었을까?

 

조금만 생각해보고 정 모르겠다면 밑으로 내려가면 된다.

 

그리고 BufferedWriter을 사용하여 int형을 출력할 땐 간단히 String으로 바꾸어서 출력해야 아스키코드의 값이 나오지 않는다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

19로 예를 들어보겠다.

19는 10과 9의 합이다. 일의 자리를 k1, 십의 자리를 k2라고 하자.

 

그럼 각 k 합의 최대는 몇일까?

k2 + k1 = 18이다.

9  +  9  = 18

각 k의 최대 값은 9를 넘지 않는다.

그러므로 우리는 각 자리수만큼의 최대값 (9)를 모두 더한 값을 빼주면 그 미만의 값들은 생성자가 될 수 없다는 것을 알 수있다.

 

다시 19로 예를들면

k2 + k1 = 18

19-18 =1

1보다 작은 0은 생성자가 될 수 없다는 사실이다.

 

큰수도 마찬가지로 적용하니 한 번 생각해보면 좋을 것 같다.

'백준 문제풀이' 카테고리의 다른 글

[백준] 1152번  (0) 2024.03.30
[백준] 1037번 풀이  (0) 2024.03.17
[백준] 1032번 문제풀이  (0) 2024.02.20
[백준] 1920번 문제풀이  (0) 2024.02.10
[백준]10828번 문제풀이  (0) 2024.02.05