https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
9명의 난쟁이 중에서 키의 합이 100이 되는 진짜 일곱난쟁이를 찾는 문제이다.
나는 9명의 키의 다 더해서 총합을 구하고 arraylist의 값 중 2개의 값을 삭제하는 방식으로 문제를 풀었다.
- 코드
import java.util.*;
import java.io.*;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[9];
for(int i=0;i<9;i++){
arr[i] = Integer.parseInt(bf.readLine());
}
ArrayList<Integer> list = new ArrayList<>();
int tot = IntStream.of(arr).sum();//난쟁이의 키의 합을 더한다.
for(int a : arr){
list.add(a);
}
int target= tot-100;//100을 빼서 타겟 넘버를 저장
for(int i=0;i<arr.length;i++){
int now = arr[i];
int want= target-now;
list.remove(Integer.valueOf(now));
if(list.contains(want)) {//리스트에 찾는 값이 있는지 검사
list.remove(Integer.valueOf(want));//있으면 삭제하고
break;//반복문 탈출
}
list.add(now);
}
Collections.sort(list);//오름차순으로 정렬
for(int a: list){
System.out.println(a);
}
}
}
- 설명
1) IntStream.of(arr).sum()
arr배열의 값을 모두 더함.
2) list.remove(Integer.valueOf(now))
list.remove(20); 이라고 쓸 경우, 20이 값인 게 아니라 리스트 인덱스 20인 값이 삭제되게 된다.
따라서 valueOf로 String값으로 바꿔주고 값으로 찾을 수 있도록 하였다.
'코테' 카테고리의 다른 글
[프로그래머스/LV2] 호텔 대실 (1) | 2024.09.16 |
---|---|
[백준/브론즈1] 2775번: 부녀회장이 될테야 (0) | 2022.12.07 |
[프로그래머스/LV2] 주식가격(Stack) (0) | 2022.07.12 |
[프로그래머스/LV2] 타겟 넘버(DFS) (0) | 2022.07.11 |
[프로그래머스/LV2] 숫자의 표현 (0) | 2022.07.07 |