시리즈: 알고리즘 (32개 글)
- 자바로 알고리즘 풀기
- [Java] 백준 10431 - 줄 세우기
- [Java & Node.js] 백준 9935 - 문자열 폭발
- [Node.js] 백준 22866 - 탑 보기
- [Java] 백준 4485 - 녹색 옷 입은 애가 젤다지?
- [Node.js] 백준 1283 - 단축키 지정
- [Java & Node.js] 백준 14469 - 소가 길을 건너간 이유 3
- [Java] 백준 8979 - 올림픽
- [Node.js] 백준 22866 - 탑 보기
- [Java] 백준 7568 - 덩치
- [Java] 백준 1244 - 스위치 켜고 끄기
- [Node.js] 백준 19941 - 햄버거 분배
- [Node.js] 백준 1254 - 팰린드롬 만들기
- [Java] 백준 2589 - 보물섬
- [Java] 백준 2309 - 일곱 난쟁이
- [Java] 백준 1789 - 수들의 합
- [Java] 백준 1987 - 알파벳
- [Node.js] [Rust] 백준 24460 - 특별상이라도 받고 싶어
- [Node.js] 백준 7576 - 탑 보기
- [Rust] 백준 1047 - 울타리 (N^4 브루트포스 + 그리디)
- [Node.js] 백준 9657 - 돌게임3
- [Rust] 백준 4963 - 섬의 개수
- [Node.js] 프로그래머스 - 모의고사 / 실패율
- [Rust] 백준 2667 - 단지번호붙이기
- [Node.js] 프로그래머스 - 방문 길이
- [Node.js] 프로그래머스 - 괄호 회전하기
- [Rust] 백준 1002 - 터렛
- [Node.js] 프로그래머스 - 크레인 인형뽑기 게임
- [Node.js] 프로그래머스 - 기능개발
- [Rust] 백준 13717 - 포켓몬 GO
- [JavaScript] 백준 1092 - 배
- [Rust] 백준 25329 - 학생별 통화 요금 계산
백준 2309 - 일곱 난쟁이
접근
- 키의 합은 100
- 그러면 7명을 다 뽑아서 (9C7) 100인지 확인해야 할까? 했지만
- 2명만 가짜임. 2명을 뽑아서 전체 합에서 뺀 후 100이라면 7명은 진짜임
9C7 = 9C2
와! 단순해졌다!
구현 전
어떻게 이중 루프 탈출시킬까…
누군가 라벨에 대해서 말해줘서 써볼까 했지만 아직 학습하지 않은 내용을 사용하기에는 거부감이 들었다. 따라서 플래그 변수를 통해 진행
구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays; // Arrays.sort()를 위해 필요
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] dwarfs = new int[9];
int totalSum = 0;
// 1. 난쟁이 키 입력 및 총합 계산
for (int i = 0; i < 9; i++) {
dwarfs[i] = Integer.parseInt(br.readLine());
totalSum += dwarfs[i];
}
br.close();
int excludeOne = -1; // 제외할 첫 번째 난쟁이 인덱스 (초기값 -1로 설정)
int excludeTwo = -1; // 제외할 두 번째 난쟁이 인덱스
boolean found = false; // 가짜 난쟁이를 찾았는지 여부를 나타내는 플래그 변수
// 2. 가짜 난쟁이 2명 찾기 (플래그 변수 사용)
for (int i = 0; i < 8; i++) {
for (int j = i + 1; j < 9; j++) {
if ((totalSum - dwarfs[i] - dwarfs[j]) == 100) {
excludeOne = i;
excludeTwo = j;
found = true; // 찾았음 표시
break; // 안쪽 루프 탈출
}
}
if (found) { // 안쪽 루프에서 찾았으면
break; // 바깥 루프도 탈출
}
}
// 3. 진짜 일곱 난쟁이의 키 추출
int[] ansDwarfs = new int[7];
int idx = 0;
for (int i = 0; i < 9; i++) {
if (i == excludeOne || i == excludeTwo) {
continue; // 가짜 난쟁이는 건너뛰기
}
ansDwarfs[idx++] = dwarfs[i]; // 진짜 난쟁이 키 추가
}
// 4. 오름차순으로 정렬
Arrays.sort(ansDwarfs);
// 5. 결과 출력
for (int d : ansDwarfs) {
System.out.println(d);
}
}
}
후기
어…
아직까지는
사실 입력받는게 제일 어려울지도..?