문제: https://school.programmers.co.kr/learn/courses/30/lessons/133502
1. 코드
import java.util.*;
class Solution {
public int solution(int[] ingredient) {
int answer = 0;
StringBuilder sb = new StringBuilder();
int len = 0;
for(int i : ingredient) {
sb.append(i); len++;
if(i == 1 && len >= 4 && sb.substring(len - 4).equals("1231")) {
sb.delete(len - 4, len);
len -= 4;
answer++;
}
}
return answer;
}
}
2. 설명
이 문제는 문자열을 이용하여 쉽게 해결하였습니다.
int answer = 0;
StringBuilder sb = new StringBuilder();
int len = 0;
문자열의 삽입과 삭제가 빈번하기에 StringBuilder를 사용하였습니다. len은 StringBuidler에 대한 길이입니다.
for(int i : ingredient) {
sb.append(i); len++;
if(i == 1 && len >= 4 && sb.substring(len - 4).equals("1231")) {
sb.delete(len - 4, len);
len -= 4;
answer++;
}
}
반복문을 이용하여 정수를 sb에 삽입 후 len을 1 증가시킵니다. 그리고 i의 값이 1이고, 길이가 4 이상이고 끝 부분이 1231인지 확인 후 동일하다면 햄버거를 완성했다는 것이기에 1231 부분을 삭제한 뒤 길이 또한 -4를 해주며 answer에는 1을 증가합니다.
3. 정리
- 기존에 반복문 안에 int len = sb.toString().length()를 사용하였는데 시간 초과가 생기기에 정수의 증감으로 길이를 저장하였다.
- Strring().length()를 자주 쓰는데 만약 시간초과가 생긴다면 줄여보도록 하자.
- 반복문 안에 변수를 생성하는 것도 시간초과가 생긴다면 줄여보도록 하자.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 161990번: 바탕화면 정리 [Java] (0) | 2023.08.16 |
---|---|
프로그래머스 - 118666번: 성격 유형 검사하기 [Java] (0) | 2023.08.15 |
프로그래머스 - 72410번: 신규 아이디 [Java] (0) | 2023.08.13 |
프로그래머스 - 67256번: 키패드 누르기 [Java] (0) | 2023.08.12 |
프로그래머스 - 155652번: 둘만의 암호 [Java] (0) | 2023.08.11 |