Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스터디
- 기술면접
- 코테
- Kotlin
- 카카오코테
- MySQL
- select
- join
- 혼공챌린지
- 알고리즘
- 혼공파
- 티스토리챌린지
- 자바
- 프로그래머스
- doitandroid
- 코틀린
- 정보처리기사
- 자료구조
- 오블완
- java
- Til
- SQL
- 정처기
- 안드로이드스튜디오
- CS
- 혼공단
- 인프런
- 안드로이드
- Android
- groupby
Archives
- Today
- Total
Welcome! Everything is fine.
[프로그래머스/Lv.1] 햄버거 만들기 - Java 본문
728x90
📌 문제
📌 풀이
스택으로 쉽게 풀 수 있었던 문제지만 stack.get()으로도 스택에 있는 값을 확인할 수 있다는 걸 몰라서 헤맸다(...)
풀이 과정을 간단하게 설명하면 다음과 같다.
- 스택을 선언한다.
- ingredient 배열을 돌면서 요소를 스택에 저장한다.
- 스택의 길이가 4 이상이 될 경우
- 스택의 마지막 요소가 1이고, 그 다음 요소가 3, 그다음 요소가 2, 마지막에서 4번째 요소가 1일 경우, 빵 - 야채 - 고기 - 빵 순서이므로 4개를 모두 꺼낸다.
- 햄버거의 개수 answer를 1 증가시킨다.
- 스택의 길이가 4 이상이 될 경우
for (int i : ingredient) {
stack.push(i);
if (stack.size() >= 4) {
if (stack.get(stack.size() - 1) == 1
&& stack.get(stack.size() - 2) == 3
&& stack.get(stack.size() - 3) == 2
&& stack.get(stack.size() - 4) == 1) {
stack.pop();
stack.pop();
stack.pop();
stack.pop();
answer++;
}
}
}
📌 다른 풀이 - 배열로 풀기
다른 사람들의 풀이를 보니 스택을 사용하지 않고 배열만을 이용해서 풀 수 있었다. 햄버거가 완성되면 그 요소들을 삭제시키는 것만 생각했는데, 삭제하지 않고 그 위로 덮어 씌워도 삭제한 것처럼 동작시킬 수 있었다.
먼저 ingredient 배열의 길이를 가진 stack 배열을 선언한다. stack 배열 인덱스로 사용할 idx 변수도 만든다.
int answer = 0;
int[] stack = new int[ingredient.length];
int idx = 0;
그리고나서 ingredient 배열을 돌면서 stack 배열에 요소를 넣는다. 동시에 idx를 증가시킨다. 계속 요소를 넣으면서 idx가 4 이상이면서 특정한 자리의 요소들이 빵 - 야채 - 고기 - 빵 순일때, 햄버거 개수 answer를 1 증가시키고 idx에서 4를 뺀다. 4를 빼면 마치 해당 요소를 삭제한 것처럼 그 위에 덮어쓸 수 있다.
for (int i : ingredient) {
stack[idx++] = i;
if (idx >= 4 && stack[idx - 1] == 1
&& stack[idx - 2] == 3
&& stack[idx - 3] == 2
&& stack[idx - 4] == 1) {
idx -= 4;
answer++;
}
}
📌 전체 코드
스택으로 푸는 방법
import java.util.*;
class Solution {
public int solution(int[] ingredient) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int i : ingredient) {
stack.push(i);
if (stack.size() >= 4) {
if (stack.get(stack.size() - 1) == 1
&& stack.get(stack.size() - 2) == 3
&& stack.get(stack.size() - 3) == 2
&& stack.get(stack.size() - 4) == 1) {
stack.pop();
stack.pop();
stack.pop();
stack.pop();
answer++;
}
}
}
return answer;
}
}
배열로 푸는 방법
class Solution {
public int solution(int[] ingredient) {
int answer = 0;
int[] stack = new int[ingredient.length];
int idx = 0;
for (int i : ingredient) {
stack[idx++] = i;
if (idx >= 4 && stack[idx - 1] == 1
&& stack[idx - 2] == 3
&& stack[idx - 3] == 2
&& stack[idx - 4] == 1) {
idx -= 4;
answer++;
}
}
return answer;
}
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
[프로그래머스/Lv.1] 옹알이(2) - Java (0) | 2024.04.27 |
---|---|
[프로그래머스/Lv.1] 실패율(2019 KAKAO BLIND RECRUITMENT) - Java (0) | 2024.04.25 |
[프로그래머스/Lv.1] 덧칠하기 - Java (0) | 2024.04.23 |
[프로그래머스/Lv.1] 성격 유형 검사하기(2022 KAKAO TECH INTERNSHIP) - Java (0) | 2024.04.22 |
[프로그래머스/Lv.1] 소수 만들기(feat.에라토스테네스의 체) - Java (1) | 2024.04.22 |