코딩테스트/Programmers
[JAVA] 햄버거 만들기
hxx_1
2024. 5. 7. 21:05
< 처음 풀이 >
class Solution {
public int solution(int[] ingredient) {
StringBuilder sb=new StringBuilder();
for(int i=0;i<ingredient.length;i++){
sb.append(ingredient[i]);
}
int answer = 0;
int start=0;
while(true){
int index=sb.indexOf("1",start);
boolean wrap=false;
if(index+4<=sb.length()){
String s=sb.substring(index,index+4);
if(s.equals("1231")) {
answer++;
sb=sb.replace(index,index+4,"");
start=0;
wrap=true;
}
else
start=index+1;
}
else
break;
}
return answer;
}
}
➡️ 처음에는 StringBuilder를 사용해서 문제를 풀려고 했는데, 이렇게 하니 계속 시간 초과가 나서 문제 풀이에 실패했다.
< 풀이 >
import java.util.*;
class Solution {
public int solution(int[] ingredient) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<>();
for(int i=0;i<ingredient.length;i++){
list.add(ingredient[i]);
if(list.size() >=4 &&
list.get(list.size()-4) == 1 &&
list.get(list.size()-3) == 2 &&
list.get(list.size()-2) == 3 &&
list.get(list.size()-1) == 1){
answer++;
for(int j=0;j<4;j++){
list.remove(list.size()-1);
}
}
}
return answer;
}
}
✏️ 풀이 방법
1. Arraylist를 만든다.
2. list에 값을 넣으며 list의 값의 개수가 4개 이상일 때마다 끝에서 4개의 숫자가 무엇인지 검사를 한다.
ex) 2 1 1 2 일 때 검사 => 1 2 3 1 아님
2 1 1 2 3 일 때 검사 => 1 2 3 1 아님
2 1 1 2 3 1 일 때 검사 => 1 2 3 1 이므로 answer 증가, 반복문을 돌며 4개의 수 삭제
3. 위와 같은 방법으로 검사를 한 후 answer을 return 한다.
✍🏻 느낀점
처음에 나는 문자열로 바꿔서 풀어야된다고 생각해서 너무 복잡하게 풀었다. 처음 시작을 어떻게 하는지도 굉장히 중요한 것 같다. 시작을 잘못하면 뒤엎기가 너무 힘들기 때문에,, 다른 블로그를 통해 이렇게 간단하게 풀 수 있다는 것을 또 배웠다. 배열이 매개변수로 주어졌을 때 , 그냥 배열을 유지하고 푸는 것이 시간 면에서 더 효율적인 것 같다.
참고 블로그