안드로이드 개발자의 창고
[프로그래머스] 2019 카카오 개발자 겨울 인턴쉽_크레인 인형뽑기 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 코드
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
int m = 0;
List<Integer> basket = new ArrayList<Integer>();
for(int i = 0; i < moves.length; i++){
m = moves[i]-1;
for(int j=0; j<board.length; j++){
if(board[j][m] != 0){
if(!basket.isEmpty() && basket.get(basket.size()-1) == board[j][m]){
basket.remove(basket.size()-1);
answer += 2;
} else {
basket.add(board[j][m]);
}
board[j][m] = 0;
break;
}
}
}
return answer;
}
}
해당 문제는 arraylist를 사용하여 풀은 문제이지만, stack을 이용해도 무방하다. stack을 써서 풀은 친구가 코드도 짧고 간단하지만 위의 풀이가 더 높은 점수를 받았다. 아마 stack을 사용하면 사용하는 메소드(pop, push 등) 때문에 시간이 오래걸려서 그런듯.(내 생각이지 확실하진 않다..)
별의 별 오류가 다 떴다. 인덱스 오류부터 괄호 안써서 쓰는 간단한 오류까지..
인덱스 오류는 대부분 배열 값을 찾는 곳에서 발생한다. 예를 들면 실제 배열은 0부터 시작하는데 1을 가지고 찾거나 -1을 해주다가 실수로 array[-1]이 된다던지...
이 문제의 핵심은
배열을 잘 이해하고 있는가,
arraylist나 stack을 잘 알고 사용하는가의 문제같다.
arraylist를 쓴 이유는 객체를 제거할 때 자동으로 객체를 앞으로 당겨주기 때문이다.
일반 list를 쓴다면 중간 객체를 삭제하면 그 자리는 공백으로 남고 앞으로 당겨주는 작업은 하나하나 수작업으로 해줘야된다.
또한 저장 용량을 초과하면 자동적으로 늘어나기 때문에 얼마나 들어올지 모르는 인형 바구니를 1000으로 할당해서 메모리를 낭비하는 것보다 효율적이다.
stack은 처리시간에서 다소 느려진다는 단점이 있지만 pop이나 push, peek 같은 메소드를 알면 훨씬 쉽게 코딩할 수 있다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 정수 제곱근 판별(Lv.1) - 코틀린 (0) | 2023.05.08 |
---|---|
[프로그래머스] 특이한 정렬(Lv.0) - 파이썬 (0) | 2023.05.08 |
[프로그래머스] 겹치는 선분의 길이(Lv.0) - 파이썬 (2) | 2023.05.08 |
[프로그래머스] K번째 수(Lvl.1) - Java (0) | 2023.05.07 |
[프로그래머스] 안전지대(Lv.0) - Python (0) | 2023.05.07 |