https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

import java.util.*;

class Solution {
     public static int solution(int[] topping) {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        int res = 0;
        int[] reverseTopping = new int[topping.length];
        for (int i = 0; i < topping.length; i++) {
            reverseTopping[topping.length - 1 - i] = topping[i];
        }

        //list를 채우는 메서드
        fillList(list1, topping);
        fillList(list2, reverseTopping);
        Collections.reverse(list2);

        //토핑 갯수가 동일한 구간 구하기
        for (int i = 0; i < list1.size() - 1; i++) {
            if (list1.get(i).equals(list2.get(i + 1))) res++;
        }

        return res;
    }

    static void fillList(List<Integer> list, int[] topping) {
        Set<Integer> set = new HashSet<>();
        int cnt = 0;

        for (int j : topping) {
            if (!set.contains(j)) {
                set.add(j);
                list.add(++cnt);
            } else {
                list.add(cnt);
            }
        }
    }
}

 

원래 값 비교 부분에서 == 을 이용해서 답이 안나왔다.

if (list1.get(i) == list2.get(i + 1)) res++;

 

Boxed primitive 또는 Wrapper class(Integer) 끼리 비교 하는 경우, 

== 연산자 각 객체의 주소 값 비교 하게 된다. 값끼리의 비교는 equal 메소드를 사용해야한다.

if (list1.get(i).equals(list2.get(i + 1))) res++;

 

 

참고

https://marobiana.tistory.com/130

 

Java의 Integer, int 숫자 비교의 주의사항

예전에 프로그램에 버그가 있었고 원인을 한참을 못찾은적이 있었다.숫자 비교하다 생긴 문제였고, 무심코 코딩하다 틀리고 삽질할 수 있는 부분이라 블로그에 남겨본다.ㅎㅎ 아래는 숫자를 저

marobiana.tistory.com

 

+ Recent posts