모든 식료품의 가격을 25% 세일한 가격표와 하지 않은 가격표를 뒤섞은 뒤, 오름차순으로 정렬하였는데 세일한 가격만을 오름차순으로 출력하는 문제이다. 모든 세일 전 식료품의 가격은 4의 배수이다.
세일된 가격만 찾으면 되므로 제일 작은 가격부터 끝까지 세일 전 가격인 (현재 가격 * 4) / 3 이 존재하면 세일 전 가격을 제거한 후, 세일 전 가격 리스트에 추가해 준다. 이를 위해 현재 가격이 3의 배수여야 한다. 세일 전 가격은 indexOf를 이용하여 찾았다. 또한, 세일 전 가격을 제거하지 않으면 없는 값으로 다른 가격을 발견하는 문제가 생기므로 반드시 제거해야 한다.
List<Long> list = new ArrayList<>();
for(int i=0; i<2*n; i++) {
long price = Long.parseLong(st.nextToken());
list.add(price);
}
List<Long> answer = new ArrayList<>();
for(int i=0; i<list.size(); i++) {
long price = list.get(i);
if(price % 3 != 0) {
continue;
}
long target = (price*4) / 3;
if(list.indexOf(target) != -1) {
answer.add(price);
list.remove(list.indexOf(target));
}
}
결과 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int tc = 1; tc <= T; tc++) {
sb.append('#').append(tc).append(' ');
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
List<Long> list = new ArrayList<>();
for(int i=0; i<2*n; i++) {
long price = Long.parseLong(st.nextToken());
list.add(price);
}
List<Long> answer = new ArrayList<>();
for(int i=0; i<list.size(); i++) {
long price = list.get(i);
if(price % 3 != 0) {
continue;
}
long target = (price*4) / 3;
if(list.indexOf(target) != -1) {
answer.add(price);
list.remove(list.indexOf(target));
}
}
for(long price: answer) sb.append(price).append(' ');
sb.append('\n');
}
br.close();
System.out.print(sb);
}
}'알고리즘(백준 등) 공부' 카테고리의 다른 글
| SWEA 19003. 팰린드롬 문제 (0) | 2026.04.28 |
|---|---|
| SWEA 19004. 점프 놀이 (0) | 2026.04.28 |
| SWEA 19185. 육십갑자 (0) | 2026.04.27 |
| SWEA 20019. 회문의 회문 (0) | 2026.04.26 |
| SWEA 20551. 증가하는 사탕 수열 (0) | 2026.04.26 |