Paradox Simulation

728x90
반응형

코딩테스트 연습 - 옹알이 (1) | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

옹알이(1)

문제 설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 
제한사항
  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
    • 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.
 
입출력 예babblingresult
["aya", "yee", "u", "maa", "wyeoo"] 1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3
 
입출력 예 설명

입출력 예 #1

  • ["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.

입출력 예 #2

  • ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return합니다.
 
유의사항
  • 네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.

 

 

※ 공지 - 2022년 10월 27일 문제 지문이 리뉴얼되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.

 

 

 

참 신기한 게 문제 난이도가 0 레벨이길래 1보다 쉬운 건가 싶어서 쉽게 생각했다가 제한사항과 유의사항 등 등에 큰 변수들을 맞게 한 문제였다.

 

우선 해결한 답부터..

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        List<String> speech = new ArrayList<String>(
            Arrays.asList("aya", "ye", "woo", "ma")
        );
        for (String s : babbling){
            for(String speechLanguage : speech) {
                s = s.replaceAll(speechLanguage, "P");
            }
            if(s.matches("P*")){
                answer ++;
            }
        }
        return answer;
    }
}

우선 해결방식을 좀 나눠서 정리했다.

 

  1. 필요한 대답에 대한 단어 List형으로 받기
  2. 일치하는 단어를 "P"로 치환하기
  3. 치환된 P가 여러 개 있던 상관없이 ++해주기 (정규형사용)

 

실행 결과
채점을 시작합니다.
정확성 테스트
테스트 1  통과 (2.39ms, 77.6MB)
테스트 2  통과 (8.26ms, 76.7MB)
테스트 3  통과 (6.45ms, 76.9MB)
테스트 4  통과 (4.80ms, 78.8MB)
테스트 5  통과 (4.11ms, 78MB)
테스트 6  통과 (3.24ms, 79.2MB)
테스트 7  통과 (2.94ms, 79.9MB)
테스트 8  통과 (4.95ms, 74.2MB)
테스트 9  통과 (3.10ms, 78.2MB)
테스트 10  통과 (3.05ms, 74.5MB)
테스트 11  통과 (1.12ms, 77.7MB)
테스트 12  통과 (0.45ms, 72.2MB)
테스트 13  통과 (0.61ms, 73.7MB)
테스트 14  통과 (0.73ms, 80.8MB)
테스트 15  통과 (1.03ms, 75MB)
테스트 16  통과 (1.33ms, 76.4MB)
테스트 17  통과 (1.08ms, 83.9MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
 
 

참고했던 것들.

이하 정규형인데, 정규형 관련해서는 블로그에 따로 정리하도록 하겠다.

 

우선 간단히 사용했던 몇몇 개의 문법들을 좀 정리해 보겠다.

 

정규 표현식 설명
^[0-9]*$ 숫자
^[a-zA-Z]*$ 영문자
^[가-힣]*$ 한글
\\w+@\\w+\\.\\w+(\\.\\w+)? E-Mail
^\d{2,3}-\d{3,4}-\d{4}$ 전화번호
^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$ 휴대전화번호
\d{6} \- [1-4]\d{6} 주민등록번호
^\d{3}-\d{2}$ 우편번호
/^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/ URL
([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) IP 주소

 

 

728x90
반응형
250x250
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band