[백준] 2309번: 일곱 난쟁이 (Java)

seri·2024년 6월 24일
0

코딩테스트 챌린지

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

문제: https://www.acmicpc.net/problem/2309

📌 문제 탐색하기

입력 : 100을 넘지 않는 9개의 자연수
출력 : 합이 100인 7개의 자연수 오름차순

가능한 시간복잡도

N개의 입력만 받기 때문에 O(N^2) 까지도 가능

알고리즘 선택

상수 시간 복잡도인 완전탐색

📌 코드 설계하기

  1. 100을 넘지 않는 자연수 9개를 Input으로 받는다.
  2. 9개의 총합을 구한다.
  3. 총합에서 2개의 합을 뺐을 때 100이 되면 오름차순으로 정렬해 출력한다.

📌 시도 회차 수정 사항 (Optional)

💡 시도별 수정 사항은 어떻게 작성하나요?
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.

1회차

성공

2회차

📌 정답 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] height = new int[9];
        int sum = 0;
        
        for (int i = 0; i < 9; i++) {
            height[i] = sc.nextInt();
            sum += height[i];
        }
        
        boolean found = false;
        for (int i = 0; i < 8; i++) {
            for (int j = i + 1; j < 9; j++) {
                if (sum - height[i] - height[j] == 100) {
                    height[i] = 0;
                    height[j] = 0;
                    found = true;
                    break;
                }
            }
            if (found) break;
        }
        
        Arrays.sort(height);
        
        for (int k : height) {
            if (k != 0) {
                System.out.println(k);
            }
        }
    }
}
profile
꾸준히 정진하며 나아가기
post-custom-banner

0개의 댓글