On the journey of

[Python] 프로그래머스 2문제 풀어보기(문자열 나누기, 옹알이2) 본문

코딩테스트/Python

[Python] 프로그래머스 2문제 풀어보기(문자열 나누기, 옹알이2)

dlrpskdi 2023. 4. 27. 11:10

* 이 문항들은 '누구나 AI' 부트캠프 5기 커리큘럼의 코딩테스트 시간 중 나온 프로그래머스의 문항들임을 밝힙니다 *


1. 문자열 나누기

개인적으로는 해석부터 쉽지 않았던...문항 :( 설명하자면 이렇다


[Banana의 경우]

1. b로 시작하니까, b와 b가 아닌 문자로 구분한다. 

2. 두 번째 글자는 a (b가 아니다) : b 1개, not b 1개로 개수가 같으니 여기서 1차전 종료

3. ba는 버리고, 'nana' 문자열만 주어졌다고 가정한다. n으로 시작하니까, n와 not n으로 구분.

4. 다음 글자는 a: not n이다. 즉, n과 a 개수가 1개로 같으니 여기서 2차전 종료.

5. na를 버리고, na만 주어졌다고 생각한다. 위와 마찬가지로 n으로 시작하니 n과 not n으로 구분.

6. n과 a 개수가 1개로 같으니 여기서 3차전 종료. 끝.

7. 최종적으로는 ba // na // na로 구분된다. 

[aaabbaccccabba의 경우]

1. a로 시작하니까 a와 not a로 구분한다. 

2. a가 3개 연속으로 나왔으니, 개수를 3개로 맞추기 위해서는 not a 문자가 3개 나올 때 멈추면 되는 것.

3. aaa // bb까지 not a 문자가 2개 나왔다(bb). 그러나 다음 글자는 a

4. 그러면 aaabba까지, a가 4개, not a 가 2개. 개수를 맞춘다면 not a가 4개여야 하므로 2개 더 나와야 한다.

5. cc는 not a 문자가 2개 있는 상태이므로, aaabbacc까지 해서 a와 not a가 4개로 개수가 맞다. 여기서 1차전 종료.

6. aaabbacc를 버리고, 주어진 문자 s' = "ccabba"라고 생각하자. 그러면 c로 시작하니까, c와 not c로 구분할 수 있다.

7. cc : c가 2개이므로, not c 문자도 2개 나와야 한다. a, b 2개가 나왔으므로, ccab에서 2차전 종료.

8. s'' = "ba"라고 생각하자. 그러면 b와 not b로 구분해야 한다. b와 not b 문자(a)가 각 1개씩으로 개수가 맞다.여기서 끝.

9. 최종적으로 aaabbacc // ccab // ba 로 구분되는 것.


 

SOL - 첫 문자와 '첫 문자와 다른' 문자 두 종류가 있으므로, 변수가 2개 있어야 한다. 쉽게, cnt1(count 1)과 cnt2로 두자.

cnt1 : 첫 문자와 같은 문자를 담을 변수 ; cnt2 : 첫 문자와 다른 문자를 담을 변수

그리고 우리는 최종적으로 구분된 문자열의 개수를 리턴해야 하기 때문에 분절된 문자열의 개수를 담을 변수 answer도 두자.

answer은 cnt1와 cnt2의 개수가 (위 설명에서 ~차전 종료할 때, 개수가 같아지면 종료했으니까) 같으면 1개씩 늘어난다.


cnt1 = 0

cnt2 = 0

answer = 0으로 시작하자. 

나는 colab 환경에서 실행했다 :)

 

s는 주어진 문자열이며, solution은 내가 정의하는 함수 이름이다. cnt1와 cnt2의 개수가 같아질 때 (cnt1 == cnt2) answer가 +=1 : 1씩 증가하게끔 알고리즘을 구성했고 s라는 문자열을 순회할 k라는 임의의 변수를 가져왔다. 또한, cnt1과 cnt2가 어떻게 늘어나는지(카운트 어케 하는지) k를 활용해 적었다. 

k == i(첫 번째 문자)면 cnt1 += 1, 아니라면 cnt2 +=1 이며 여기서는 if-else문을 활용하였다.

 

결과물과 시간 : 작동하였고, 시간도 빠른 편!

 

2. 옹알이 (2)

SOL - 조카가 발음이 가능한 4개 문자열이 담긴 배열 ["aya","yee","u","maa"]를 만들고 시작하자. 입력값(문자열)을 받은 후, for문(반복)을 통해 발음 가능 여부를 먼저 비교한다. 이때, 발음이 가능한 문자열을 "o"나 공백 등으로 replace해주자.

 

Replace 이후, 각 문자열에 남은 요소들을 비교했을 때 replace한 문자만 남았다면 (ex. 공백으로 대체했을 때, 공백만 남은 경우) 이는 발음이 가능한 입력값이라고 판단, return해주면 된다.

나는 공백으로 대체했다 :)

굿 !