반응형
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 |