[TIL] 9월 23일

2024. 9. 23. 20:51·프로그래머스

알고리즘 문제


햄버거 만들기

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

 

프로그래머스

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

programmers.co.kr

문제 설명

 

 

처음에 짠 코드와 문제점

import java.util.*;
class Solution {
    public int solution(int[] ingredient) {
        StringBuilder str = new StringBuilder(Arrays.toString(ingredient).replaceAll("[^0-9]",""));
        return ing(str,0);
    }

    public static int ing(StringBuilder str,int cnt){
        int idx = str.indexOf("1231");
        if(idx != -1){
            cnt++;
            str.delete(idx,idx+4);
            return ing(str,cnt);
        }
        return cnt;
    }
}

제출결과

처음에는 StringBuilder 타입의 변수를 만들면서 ingredient 배열의 있는 문자열들을 replaceAll을 이용하여 한번에 대입한 뒤에 ing 메서드를 통해 indexOf의 리턴값이 -1이 나오기전까지 계속 돌아가도록 만들었더니 위 사진처럼 시간초과가 나오며, 통과한 케이스들도 시간을보면 굉장히 오래걸리는걸 볼 수 있다.

그래서 해결법을 찾아보다가 다른 분의 코드를 참고하여 코드를 고쳤다.

public int solution(int[] ingredient) {
        int answer = 0;
        StringBuilder str = new StringBuilder();

        for(int i : ingredient){
        // for문을 돌리면서 str에 이어붙인다.
            str.append(i);
            // str의 길이가 4이상면서 subString을 이용하여 
            // str의 총 길이에서 4를 뺀 인덱스부터 추출한 문자열을 
            // equals를 이용하여 "1231"과 일치한다면
            if(str.length() > 3 && str.substring(str.length()-4,str.length()).equals("1231")){
            // 이 if문으로 들어와서 answer의 수를 증가시켜 주고 
            // lastIndexOf를 이용하여 오른쪽에서부터 "1231"의 인덱스를 구한뒤
            // delete를 이용하여 삭제해준다.
                int idx = str.lastIndexOf("1231");
                answer++;
                str.delete(idx,idx+4);
            }
        }
        return answer;
    }

 

제출 결과

시간초과도 안날뿐더러 처음 작성했던 코드보다 실행 시간도 현저히 줄은걸 볼 수 있다.

요새 알고리즘 문제를 풀면서 시간초과를 보는 상황이 점점 많아지는데 시간복잡도를 생각하면서 문제를

풀어야겠다....

 

'프로그래머스' 카테고리의 다른 글

프로그래머스 - 최댓값과 최솟값  (0) 2024.10.28
[TIL] 9월 24일  (0) 2024.09.24
[TIL] 9월 20일  (1) 2024.09.20
[TIL] 9월 11일  (0) 2024.09.11
[TIL] 9월5일  (2) 2024.09.05
'프로그래머스' 카테고리의 다른 글
  • 프로그래머스 - 최댓값과 최솟값
  • [TIL] 9월 24일
  • [TIL] 9월 20일
  • [TIL] 9월 11일
haseung22
haseung22
haseung22 의 블로그 입니다.
  • haseung22
    haseung22의 블로그
    haseung22
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • TIL (39)
      • 프로그래머스 (8)
      • 프로젝트 (5)
      • 면접 대비 (4)
        • 자료구조 (3)
        • Java (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리팩토링
    계산기
    JPA
    Spring Boot
    뉴스피드
    팀 프로젝트
    티스토리챌린지
    회고
    내배캠
    docker
    과제
    자료구조
    querydsl
    til
    오블완
    공부
    알고리즘
    Spring
    프로그래머스
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
haseung22
[TIL] 9월 23일
상단으로

티스토리툴바