백준 알고리즘 - 2309 (일곱 난쟁이)

aladin·2020년 7월 28일
0

백준알고리즘

목록 보기
1/18

백준알고리즘 - 2309(일곱 난쟁이)

문제

출처 - 백준 알고리즘_2309번

I.O

코드 및 해석

import java.util.Arrays;
import java.util.Scanner;

public class Boj_2309 {
	
	public static void main(String[] args) {
		int[] arrOfNan = new int[9];	// 9명의 난쟁이 키를 저장할 배열 생성
		int sum = 0;					// 9명의 난쟁이 키의 합을 저장할 변수
		Boolean forToken = false;		// 반복문 break를 위한 토큰 값
		
		Scanner sc = new Scanner(System.in);

		/* 9명의 난쟁이 키를 입력받는 반복문 */
		for (int i = 0; i < 9; i++) {
			arrOfNan[i] = sc.nextInt();
			sum += arrOfNan[i];
		}
		
		/* 배열 내의 7명의 난쟁이 키를 찾아내는 반복문 */
		for (int i = 0; i < 9; i++) {
			for (int j = i + 1; j < 9; j++) {
				/* 9명의 난쟁이 키의 합에서 배열의 특정 2개의 항을 더한 값을 뺀 값이 100이라면 
				   7명의 난쟁이를 찾았다고 판단한다. */
				if (sum - (arrOfNan[i] + arrOfNan[j]) == 100) {
					/* 원래의 7명의 난쟁이가 아닌 2명의 난쟁이의 배열 값을 0으로 초기화 한다. */ 
					arrOfNan[i] = 0;
					arrOfNan[j] = 0;
					forToken = true;	// 반복문 중단을 위한 토큰값 변경
					break;				// 반복중지
				}
			}
			if(forToken == true) break;
		}
		
		//오름차순 정렬
		Arrays.sort(arrOfNan);
		
		//출력
		for (int i = 0; i < 9; i++) {
			if (arrOfNan[i] != 0) {
				System.out.println(arrOfNan[i]);
			}
		}
	}
}

위의 코드에서 중요한 것은 2중 반복문 내의 break문 처리이다.
break문이 없을 때도 백준 알고리즘에서 주어진 예시 값을 입력하면
정상적으로 출력되어 제출을 했으나 계속 틀린 코드로 채점되었다.
조건을 다시 꼼꼼히 읽어보니..

'가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.'
조건이 곧 break문을 의미하는 것이다.

break문이 없을 시에는 반복문이 계속 동작하여 조건을 충족하는
배열의 인덱스를 찾아 계속 0으로 초기화 해버리기 때문......

문제 및 사진출처

출처 - 백준 알고리즘_2309번

profile
컴공과 대학생의 개발노트

0개의 댓글