백준 1713 후보 추천하기 JAVA

sundays·2022년 12월 7일
0

문제

후보 추천하기

풀이

아무래도 구현문제를 많이 풀어봐야 겠다는 생각이 들었다
문제를 푸는데도 조금 차근차근히 볼 수 있는 습관이 들어지면 좋을 것 같은데 특히 구현문제가 그런것 같다.
compareTo나 Comparator를 사용하는 것에는 이제는 문젠 없는데,,

첫번째 내 코드에서 문제점은 n의 크기 만큼 들어오기 전에 중복 데이터를 검사도 안하고 add한다는 점이었다.

	for (int i = 0; i < chuchun; i++) {
            if (result.size() < n) {
                result.add(new Pictrue(sc.nextInt(), 1));
            } else {
                int num = sc.nextInt();
                boolean flag = true;
                for (int j = 0; j < n; j++) {
                    if (result.get(j).num == num) {
                        result.get(j).chuchun = result.get(j).chuchun + 1; // 이미 값이 있는 경우
                        flag = false;
                        break;
                    }
                }

                if (flag) {
                    Collections.sort(result);
                    result.remove(0);
                    result.add(new Pictrue(num, 1));
                }
            }
        }

그래서 else 안에 있는 for문 검증을 밖으로 빼줬다

	for (int i = 0; i < chuchun; i++) {
            int num = sc.nextInt();
            boolean flag = true;
            // for문 검증
            for (int j = 0; j < result.size(); j++) {
                if (result.get(j).num == num) {
                    result.get(j).chuchun = result.get(j).chuchun + 1; // 이미 값이 있는 경우
                    flag = false;
                    break;
                }
            }
            if (flag) {
                if (result.size() >= n) {
                    Collections.sort(result);
                    result.remove(0);
                }
                result.add(new Pictrue(num, 1));
            }
        }

그러고 또 틀려서 검색해봤는데. 내 코드랑 다를게 없다 생각했는데,
들어온 데이터들을 순서대로 저장을 할 수 있는 매개변수를 하나 더 설정했다. 그렇게 해서 정렬할때 조건을 compare에 추가하였다

	static class Pictrue implements Comparable<Pictrue> {
        int idx;
        int num;
        int chuchun;

        Pictrue(int idx, int num, int chuchun) {
            this.idx = idx;
            this.num = num;
            this.chuchun = chuchun;
        }

        @Override
        public int compareTo(Pictrue o) {
            if (this.chuchun == o.chuchun) {
                return this.idx - o.idx;
            }
            return this.chuchun - o.chuchun;
        }
    }

전체 코드

전체 코드

profile
develop life

0개의 댓글