본문 바로가기
Algorithm/백준

[백준] 2309번 : 일곱 난쟁이 / java

by 코딩친구 2020. 9. 23.
반응형

www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

 

 

[ 코드 ]

 

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

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int man[] = new int[9];
		int sum = 0;
		int ans = 0;
		
		for(int i=0; i<9; i++) {
			man[i] = sc.nextInt();
			sum += man[i];
		}
		
		loop :
		for(int i=0; i<9; i++) {
			for(int j=0; j<9; j++) {
				if(i==j) continue;
				ans = sum-man[i]-man[j];
				if(ans==100) {
					man[i]=0;
					man[j]=0;
					break loop;
				}
			}
		}
		
		Arrays.sort(man);
		
		for(int i=0; i<9; i++) {
			if(man[i]!=0) {
				System.out.println(man[i]);
			}
		}
		
		sc.close();
	}

}

 

 

 

틀리게 된 경로는 상당히 많은데,

 

1.

man[i] = 0;

man[j] = 0;

 

if(man[i]!=0) {

   System.out.println(man[i]);

}

 

대신에 

 

a,b를 선언하고

a=i;

b=j;

 

if(i==a || i==b) continue;

System.out.println(man[i]);

 

하였더니 기다리는 중만 뜨고 나오지가 않는다!

결과상 틀렸습니다 라고 떴다.

 

 

2.

loop를 빼먹었을 때 실패하였다.

loop를 전체를 나오려면 break; 만으로 되지 않고

loop를 선언 뒤, break loop; 를 선언해야한다.

 

3.

다른 방법으로는 boolean을 선언해서 true 처리를 이용해 for문을 빠져나올 수 있도록 하는 방법이다.

개인적으로 아직 익숙하지 않지만 boolean을 이용해 이렇게 풀 수도 있다.

 

 

[ 코드 ]

 

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

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int man[] = new int[9];
        boolean check = false;
		int sum = 0;
		int ans = 0;
		
		for(int i=0; i<9; i++) {
			man[i] = sc.nextInt();
			sum += man[i];
		}
		
		for(int i=0; i<9; i++) {
            if(check) break;
			for(int j=0; j<9; j++) {
				if(i==j) continue;
				ans = sum-man[i]-man[j];
				if(ans==100) {
					man[i]=0;
					man[j]=0;
                    check = true;
					break;
				}
			}
		}
		
		Arrays.sort(man);
		
		for(int i=0; i<9; i++) {
			if(man[i]!=0) {
				System.out.println(man[i]);
			}
		}
		
		sc.close();
	}

}

 

 

 

※ 오늘의 교훈

boolean 함수의 이용법을 익히자.loop도 가능하니 내가 사용하기 편한 쪽으로 풀어도 괜찮을 것 같다.

반응형

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

[백준] 2638번 : 치즈 / java  (0) 2021.02.04
[백준] 2578번 : 빙고 / java  (0) 2020.09.24
[백준] 10866번 : 덱 / c++  (0) 2020.05.29
[백준] 1436번 : 영화감독 숌 / c++14  (0) 2020.05.27
[백준] 2798번 : 블랙잭 / c++  (0) 2020.05.27