옹알이 (2)

2025. 1. 31. 09:33·코딩 테스트/프로그래머스

문제

문제 해석

- "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합

- 연속해서 같은 발음을 하는 것은 불가능

- 따라서

1. 반복문으로 babbling에 들어있는 문자열을 네 가지 발음 각각의 길이(2개, 3개)로 쪼개서(substr 활용) 할 수 있는 발음 문자열과 같은지 비교하고

2. 이전에 한 발음 문자열과 같은지를 판별하여 전부 통과한다면 증가시키면 된다.

 

코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> babbling) {
    // 발음할 수 있는 것은 아래의 4개만 가능
    vector<string> CanBabbling = {"aya", "ye", "woo", "ma"};

    int Answer = 0;
    // 네 가지 발음을 조합해서 하되, 연속으로 같은 발음은 할 수 없다.
    bool bIsCorrect = true;
    size_t BabblingMax = babbling.size();
    int BeforeBabbleIDX = -1;
    string Length3Word, Length2Word;
    size_t EachBabblingLength = 0;
    for(int BabblIDX = 0; BabblIDX < BabblingMax; ++BabblIDX)
    {        
        bIsCorrect = true;
        // 한 개씩 검사한다.
        int BeforeBabbleIDX = -1;
        EachBabblingLength = babbling[BabblIDX].length();
        for(int CHARIDX = 0; CHARIDX < EachBabblingLength;)
        {
            Length3Word = babbling[BabblIDX].substr(CHARIDX, 3);
            Length2Word = babbling[BabblIDX].substr(CHARIDX, 2);
            if(Length3Word == CanBabbling[0])
            {
                if(BeforeBabbleIDX == 0)
                {
                    bIsCorrect = false;
                    break;
                }
                BeforeBabbleIDX = 0;
                CHARIDX += 3;
            }
            else if(Length3Word == CanBabbling[2])
            {
                if(BeforeBabbleIDX == 2)
                {
                    bIsCorrect = false;
                    break;
                }
                BeforeBabbleIDX = 2;
                CHARIDX += 3;                
            }
            else if(Length2Word == CanBabbling[1])
            {
                if(BeforeBabbleIDX == 1)
                {
                    bIsCorrect = false;
                    break;
                }
                BeforeBabbleIDX = 1;
                CHARIDX += 2;                   
            }
            else if(Length2Word == CanBabbling[3])
            {
                if(BeforeBabbleIDX == 3)
                {
                    bIsCorrect = false;
                    break;
                }
                BeforeBabbleIDX = 3;
                CHARIDX += 2;                   
            }
            else
            {
                bIsCorrect = false;
                break;
            }
        }
            
        if(bIsCorrect)
        {
            ++Answer;
        }
    }
    
    return Answer;
}

 

다른 사람의 풀이

1. 범위 기반 반복문을 사용해 문자를 문자열(Temp1)에 더해나가는 방식으로 발음할 수 있는 문자열과 같은 문자열인지 매 회 검사하여 통과할 때의 문자열을 기록(Temp2, 같은 발음 불가능 검사)하고 새로운 문자열 검사를 위해 줄여준다. 만약 babbling의 원소 1개를 검사가 끝났을 때, Temp1의 길이가 0이면 Answer를 증가시키는 풀이 방식

2. babbling을 범위 기반 반복문으로 반복하고 substr을 활용해 문자열을 검사한다. 

 

회고

1. 범위 기반 반복문도 좀 더 고려해 볼 필요가 있다.

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

체육복  (0) 2025.02.04
숫자 짝궁  (2) 2025.02.03
로또의 최고 순위와 최저 순위  (0) 2025.01.27
기사단원의 무기  (1) 2025.01.24
덧칠하기  (1) 2025.01.23
'코딩 테스트/프로그래머스' 카테고리의 다른 글
  • 체육복
  • 숫자 짝궁
  • 로또의 최고 순위와 최저 순위
  • 기사단원의 무기
DevJoo1120
DevJoo1120
  • DevJoo1120
    Jin's Programming
    DevJoo1120
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 포트폴리오 (7)
        • Castlevania: Aria of Sorrow.. (7)
        • [UE5] KILL Everything (0)
      • C++ (0)
      • 라이브러리 (1)
      • 다이렉트X11 (0)
      • Unreal Engine (11)
        • Unreal Document (1)
        • 이것 저것 (8)
        • UI (1)
      • 자료구조 및 알고리즘 (0)
      • 책 정리 (3)
        • 코딩 테스트 합격자 되기 C++ 편 (10)
      • 코딩 테스트 (32)
        • 프로그래머스 (32)
      • 스파르타 코딩 언리얼 1기 (9)
        • 특강 (0)
        • C++와 Unreal Engine으로 3D .. (2)
      • TIL(Today I Learned) (63)
      • 영어 공부 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    문자열
    스파르타 코딩 클럽
    C++
    Unreal Engine 5
    WINAPI
    정렬
    코딩 테스트
    코딩 테스트 합격자 되기 c++ 편
    정리
    map
    이중 반복문
    팀 프로젝트
    프로그래머스
    코딩테스트
    배열
    Til
    과제
    책 정리
    Study
    반복문
  • hELLO· Designed By정상우.v4.10.5
DevJoo1120
옹알이 (2)
상단으로

티스토리툴바