자두의 데브로그

[자바] 백준 2231번 분해합 본문

코딩테스트/문제 풀이

[자바] 백준 2231번 분해합

왕자두 2024. 7. 23. 18:54

https://www.acmicpc.net/problem/2231

 

어제 문제 풀면서 브루트포스 문제를 조금 더 풀어봐야겠다고 생각이 들어 쉬운 문제부터 차례로 풀어보기 시작했다! for문 내에서 while문 돌릴 때 for문에서 사용하는 변수가 아닌 임시 변수 tmp를 사용하여 i의 값을 조정해가며 문제를 풀면 됐다. 문제 자체는 어렵지 않았지만 해당 부분을 생각을 못해 i를 냅다 나누고 또 나누고,,, 이래서 무한 루프에 갇혀서 답이 안나오는 문제가 있었다. 그치만 해결 ^^!

 

* 빠르게 짚고 가는 브루트포스 간단 개념

 

브루트포스

: 완전탐색 알고리즘
가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져오는 알고리즘

 

알고리즘 설계 방법
해가 존재할 것으로 예상되는 모든 영역을 전체 탐색하는 방식

- 선형구조: 순차탐색

- 비선형구조: dfs, bfs

 

다 공부했던 거지만 또 까먹었죠,, 꾸준히 공부합시다 ^..^

import java.io.*;
import java.util.StringTokenizer;

public class Main {

    public static int[] arr;
    public static boolean[] visit;
    public static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int ans = 0;
        int n = Integer.parseInt(br.readLine());
        for (int i = 1; i <= n; i++){
            int sum = i;
            int tmp = i;
            while(tmp > 0){
                sum += (tmp % 10);
                tmp /= 10;
            }
            if(n == sum) {
                ans = i;
                break;
            }
        }

        bw.write(String.valueOf(ans));
        bw.flush();
        bw.close();
    }
}