본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 133502번: 햄버거 만들기 [Java]

문제: https://school.programmers.co.kr/learn/courses/30/lessons/133502

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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. 정리

  1. 기존에 반복문 안에 int len = sb.toString().length()를 사용하였는데 시간 초과가 생기기에 정수의 증감으로 길이를 저장하였다.
  2. Strring().length()를 자주 쓰는데 만약 시간초과가 생긴다면 줄여보도록 하자.
  3. 반복문 안에 변수를 생성하는 것도 시간초과가 생긴다면 줄여보도록 하자.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges