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
'algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 연속 부분 수열 합의 개수 JAVA (0) | 2023.01.07 |
---|---|
프로그래머스 - 체육복 (0) | 2022.10.22 |
프로그래머스 - 비밀지도 JAVA (0) | 2022.10.20 |
프로그래머스 - 이상한 문자 만들기 JAVA (0) | 2022.10.20 |
프로그래머스 - 같은 숫자는 싫어 JAVA (0) | 2022.10.19 |