백준(2751, 1110,2231)

찬들이·2022년 7월 12일
0

알고리즘

목록 보기
1/42
post-custom-banner

2751번 문제

풀이 접근

  1. 1 이상의 입력 값 n을 통해 반복문으로 n개의 index를 list에 입력
  2. Collections.sort 함수를 통해 오름차순으로 정렬
  3. 출력

소스코드

import java.io.*;
import java.util.*;
public class boj2751 {
    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 n = Integer.parseInt(br.readLine());
        int cnt = 0;
        ArrayList<Integer> arr = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            arr.add(Integer.parseInt(br.readLine()));
        }
        Collections.sort(arr);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(arr.get(i) + "\n");
        }
        bw.write(sb.toString());
        bw.flush();
  		bw.close();
  		br.close();
    }
}

문제의 핵심!

  • Arrays.sort(list) && list.sort() 와 Collections.sort(list)의 차이!
  • 시간 관점에서 StringBuilder >> String (initial capacity가 너무 크지 않을 때)
    참고: https://yeon-kr.tistory.com/157

1110번 문제

풀이 접근

  1. n을 입력받는다
  2. String.valueOf(int).split("")를 통해 자릿 수를 배열로 생성
  3. for 반복문을 통해 sum 값과 결과 값을 저장
  4. 2번과 3번의 내용을 do ~ while()문을 통해 카운트
  5. 카운트 출력

소스코드

import java.io.*;
public class boj1110 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int result = n;
        int cnt = 0;
        do{
            String[] index = String.valueOf(result).split("");
            int[] num = new int[index.length];
            for (int i = 0; i < num.length; i++) {
                num[i] = Integer.parseInt(index[i]);
            }
            int sum = 0;
            for (int i = 0; i < num.length; i++) {
                sum += num[i];
                if(sum >10){
                    sum = sum -10;
                }else if(sum ==10){
                    sum = 0;
                }
            }
            cnt++;
            result = num[index.length -1]*10 + sum;
        }while(n != result);
        System.out.println(cnt);
    }
}

문제의 핵심

  • int 변수의 자릿 수를 나누어 계산에 활용 할 수 있는가

2231번 문제

풀이 접근

  1. n을 입력 받는다.
  2. 비교를 위한 변수 cnt를 1로 생성하고 분해합이 있는지를 위한 boolean 변수 생성
  3. while문을 반복하며 분해합이 있을 경우 boolean 변수를 true로 바꾸고 break
  4. 생성자의 경우 n의 값을 넘을 수 없기 때문에 cnt==n이 되면 반복문 종료
  5. boolean변수가 true인 경우 0 출력, false인 경우 cnt 출력

소스 코드

import java.io.*;
public class boj2231 {
   public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       int n = Integer.parseInt(br.readLine());
       int cnt = 1;
       boolean isEmpty = false;
       while(cnt <n){
           String a = String.valueOf(cnt);
           String[] index = a.split("");
           int sum =0;
           for (int i = 0; i < index.length; i++) {
               sum += Integer.parseInt(index[i]);
           }
           if((cnt+sum) == n){
               isEmpty = true;
               break;
           }else{
               cnt++;
           }
       }
       if(!isEmpty){
           System.out.println(0);
       }else{
           System.out.println(cnt);
       }
   }
}

문제의 핵심

  • int 변수의 자릿 수를 나누어 계산할 수 있는지
  • 생성자가 없는 경우에 대한 예외처리를 했는지
profile
Junior-Backend-Developer
post-custom-banner

0개의 댓글