ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 2309번: 일곱 난쟁이
    Algorithm/백준 알고리즘 2021. 7. 19. 10:32


    문제 설명

    • 왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.
    • 아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.
    • 아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.

     

    입력

    • 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

     

    출력

    • 일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.

     

    풀이

    1. 아홉명의 난쟁이 중 일곱명의 난쟁이 총합이 100이되는 수를 구하면 되는 문제이다.
    2. 따라서 이중 반복문을 통해 아홉 난쟁이의 총합에서 i번째와 j번째를 합한 값을 뺀 총합이 100인경우를 찾으면 된다.
    3. 해당 값을 찾을 경우 해당 인덱스 i와 j는 0을 대입하고 0이 아닌 경우만 화면에 출력하면 문제를 해결할 수 있다.

     

    코드

    import java.util.*;
    
    class Main {  
      public static void main(String args[]) { 
        Scanner sc = new Scanner(System.in); //사용자로 부터 값을 입력받기 위해  Scanner를 사용한다.
        int[] arr = new int[9]; //아홉 난쟁이의 키를 담을 배열을 선언한다.
        boolean check = false; //정답이 여러가지일 수 있기 때문에 키의 합이 100이 되는 순간 반복문을 중단하기 위한 변수를 선언한다.
        int sum = 0; //난쟁이의 키 총 합
    
        for(int i = 0; i < 9; i++){ //반복문을 통해 난쟁이의 키를 배열에 입력하고, sum에 아홉 난쟁이의 키 총합을 저장한다.
          arr[i] = sc.nextInt();
          sum += arr[i];
        }
    
        for(int i = 0; i < 9; i++){
          if(check){ //일곱 난쟁이의 키의 합이 100이 되는 경우 break문을 통해 빠져나온다.
            break;
          }
    
          for(int j = 0; j < 9; j++){
            if(i == j){ //배열내 인덱스가 같은 원소는 비교할 필요가 없다.
              continue;
            }
            if(sum - arr[j] - arr[i] == 100){ //일곱 난쟁이의 합이 100이되는 경우
              arr[i] = 0; //해당 인덱스의 값을 0으로 초기화
              arr[j] = 0; //해당 인덱스의 값을 0으로 초기화
              check = true; //반복문을 탈출하기 위해서 check의 값을 true로 변경한다.
              break;
            }
          }
        }
        Arrays.sort(arr); //배열을 오름차순으로 정렬
        for(int i = 0; i < 9; i++){
          if(arr[i] != 0){ //배열의 i번째 값이 0이 아닌경우 화면에 출력
            System.out.println(arr[i]);
          }
        }
      } 
    }

    'Algorithm > 백준 알고리즘' 카테고리의 다른 글

    [JAVA] 1748번: 수 이어 쓰기1  (0) 2021.07.20
    [JAVA] 3085번: 사탕 게임  (0) 2021.07.19
    [JAVA] 1929번: 소수 구하기  (0) 2021.07.18
    [JAVA] 17427번: 약수의 합2  (0) 2021.07.18
    [JAVA] 1935번: 후위 표기식2  (0) 2021.07.12

    댓글

[Everything's gonna be fine]