• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

자바런타임에러

23.11.02 16:27 작성 조회수 228

0

자바로 로직을 작성했는데 런타임에러가 뜹니다. 테케를 알 수 없어서 방황중인데 무엇이 문제인가요..?

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {

        int n = Integer.parseInt(br.readLine());
        int result[] = new int[n];
        ArrayList<User> list = new ArrayList<>();
        for(int i=0; i<n; i++){
            String[] s = br.readLine().split(" ");
            list.add(new User(s[0].charAt(0), Integer.parseInt(s[1]), i));
        }

        Collections.sort(list);
        HashMap<Character, Integer> hm = new HashMap<>();
        int i=1, j=0;
        int sum = 0;
        while (i<n && j<=i){
            User user_i = list.get(i);
            User user_j = list.get(j);

            if(user_i.val <= user_j.val){
               result[user_i.index] = sum-hm.getOrDefault(user_i.alpa, 0);
                i++;
            }else{
                hm.put(user_j.alpa, hm.getOrDefault(user_j.alpa, 0) + user_j.val);
                sum+=user_j.val;
                j++;
            }
        }
        for(i=0; i<n; i++){
            System.out.println(result[i]);
        }
    }
    static class User implements Comparable<User>{
        char alpa;
        int val;
        int index;
        public User(char a, int b, int c){
            alpa=a; val=b; index=c;
        }

        @Override
        public int compareTo(User o) {
            if(val-o.val > 0) { return 1;}
            return -1;
        }
    }
}

 

답변 1

답변을 작성해보세요.

0

안녕하세요^^

런타임 에러가 나는 케이스가 모두 n크기가 10만개 이상입니다. n크가 큰 케이스에서 문제가 발생하는 것 같습니다.

compareTo 메서드를 바꾸니 런타임에러는 나지 않습니다.

static class User implements Comparable<User>{
        char alpa;
        int val;
        int index;
        public User(char a, int b, int c){
            alpa=a; val=b; index=c;
        }
        @Override
	public int compareTo(User ob){
		return this.val - ob.val;
	}
    }