본문 바로가기

알고리즘(백준 등) 공부

SWEA 19113. 식료품 가게

모든 식료품의 가격을  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