Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- docker
- fastapi
- mysql
- 프로젝트
- 쿠키로그인
- Spring
- llm
- 커밋 메시지
- 게시판
- Java
- spring boot
- 코딩테스트
- 네팔
- 서버 꺼짐
- 알고리즘
- 로그인
- cors
- 회고
- 우테코
- 부트스트랩
- 프로그래머스
- Lv.2
- crud
- Dockerfile
- 세션로그인
- 해외봉사
- springboot
- openAI
- OOM
- LV2
Archives
- Today
- Total
s00jin 님의 블로그
[프로그래머스/Java] Lv.1 옹알이(2) 본문
문제 설명
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 30
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
입출력 예
babbling result
| ["aya", "yee", "u", "maa"] | 1 |
| ["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"] | 2 |
입출력 예 설명
입출력 예 #1
- ["aya", "yee", "u", "maa"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
입출력 예 #2
- ["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye" + "ma" + "woo" = "yemawoo"로 2개입니다. "yeye"는 같은 발음이 연속되므로 발음할 수 없습니다. 따라서 2를 return합니다.
유의사항
- 네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
※ 공지 - 2024년 2월 20일 문제 지문의 오탈자가 수정되었습니다.
문제 풀이
방식
- 연속되는 발음을 contains로 검사하여 건너뛰기
- 가능한 발음을 replace를 사용하여 공백으로 변경
- 전부 공백으로 변하면 가능한 발음이라는 의미
틀린 풀이
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for (int i=0; i<babbling.length; i++){
// 연속되는 발음이 나오면 넘어가기
if (babbling[i].contains("ayaaya")||babbling[i].contains("yeye")||babbling[i].contains("woowoo")||babbling[i].contains("mama"))
continue;
// 가능한 발음은 공백으로 변환 -> 모두 공백이 되면 가능한 발음
babbling[i] = babbling[i].replace("aya", "");
babbling[i] = babbling[i].replace("ye", "");
babbling[i] = babbling[i].replace("woo", "");
babbling[i] = babbling[i].replace("ma", "");
babbling[i] = babbling[i].replace(" ", "");
if (babbling[i].length()==0)
answer+=1;
}
return answer;
}
}
위 코드 실행 시 부분 정답으로 60점 획득
이유
발음 가능한 단어를 빈 문자열("")로 치환할 때, 남은 문자열이 합쳐지면서 원래는 없던 새로운 발음 가능 단어가 만들어질 수 있음
ex) wyeoo
wyeoo에서 ye를 ""로 -> 결과 woo
남은 문자열 woo에서 woo를 ""로 -> 결과: "" (빈 문자열)
최종 문자열이 비어있으므로, 코드는 wyeoo를 발음 가능한 단어로 잘못 판단
맞은 풀이
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for (int i=0; i<babbling.length; i++){
// 연속되는 발음이 나오면 넘어가기
if (babbling[i].contains("ayaaya")||babbling[i].contains("yeye")||babbling[i].contains("woowoo")||babbling[i].contains("mama"))
continue;
// 가능한 발음은 공백으로 변환 -> 모두 공백이 되면 가능한 발음
babbling[i] = babbling[i].replace("aya", " ");
babbling[i] = babbling[i].replace("ye", " ");
babbling[i] = babbling[i].replace("woo", " ");
babbling[i] = babbling[i].replace("ma", " ");
babbling[i] = babbling[i].replace(" ", "");
if (babbling[i].length()==0)
answer+=1;
}
return answer;
}
}
replace에서 ""로 치환해주던걸 " "공백이나 특수문자 등으로 치환해주면 해결 가능
'알고리즘' 카테고리의 다른 글
| [프로그래머스/Java] Lv.1 기사단원의 무기 (3) | 2025.08.05 |
|---|---|
| [프로그래머스/Java] Lv.1 과일 장수 (1) | 2025.08.01 |
| [프로그래머스/Java] 의상 Lv.2 (2) | 2025.07.09 |
| [프로그래머스/Java] 주식가격 Lv.2 (4) | 2025.07.01 |
| [프로그래머스/Java] 타겟 넘버 Lv.2 (0) | 2025.06.26 |