본문 바로가기
source-code/Algorithm

프로그래머스 _ 이상한 문자 만들기

by mattew4483 2021. 2. 16.
728x90
반응형

프로그래머스 _ 이상한 문자 만들기

programmers.co.kr/learn/courses/30/lessons/12930

 

코딩테스트 연습 - 이상한 문자 만들기

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을

programmers.co.kr


가장 먼저 든 생각 ↓

공백을 기준으로 단어 구분 - split을 드디어 쓸 때가 왔군!

대소문자 변환 - upper/lower을 써야겠군!

 

단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야 하므로...

split(" ")을 통해 공백을 기준으로 단어를 쪼개 줬다!

 

의도한 대로 출력이 잘 되는 모습!

 

다음은 이렇게 분리된 'try' , 'hello' , 'world' 별로 짝수번째 → 대문자 / 홀수번째 → 소문자 로 바꿔줘야 한다!

 

즉 for문을 통해 각 분리된 단어들(여기서는 words)을 가져오고,

한 번 더 for문을 돌려 각 단어들의 글자들을 가져올 예정!

쨔잔. 이를 통해 각 단어들의 w번째 글자가 짝수면 대문자로, 홀수면 소문자로 변환했다.

빈 문자열인 answer을 선언한 후, 변환된 글자인 strange를 더해주면 끝!

 

...일 줄 알았는데...

아하... 글자들을 하나씩 더하다 보니 띄어쓰기가 되질 않는다!

 

그러다 문득 왜 굳이 두 번째 for문을 range(len(i))으로 돌려야하나... 하는 생각이 들어,

두번 째 for문을 각 단어들로 돌렸다!

각 글자의 index가 짝수/홀수인지를 구해야 하므로 → 문자열의 index를 구해주는 find()를 사용!

 

역시나 짝수/홀수면 대문자/소문자로 바꿔줬는데...

역시 띄어쓰기 문제는 해결 불가.

게다가 hello가 HeLLO로 잘 못 변환되었다. 왜?

l이 2개니까! hello.find(l)을 하면 당연히 3밖에 반환되지 않는다! 흐아.

 

다시 처음으로!

어떻게 하면 띄어쓰기를 만들어 낼 수 있을까를 고민하다가...

split과 짝꿍인 join이 생각났다! 요 녀석을 사용하면 합쳐지는 요소들 사이 설정 값을 넣어줄 수 있으니까!

 

join은 list를 문자열로 변환해주는 녀석. 따라서 각 글자들을 answer을 list로 선언 후 넣어줬다!

얼추 되기는 됐는데... 각 단어를 돌 때마다 초기화가 되지 않고 쌓이는 모습이다!

 

단어를 answer에 추가하면, 재선언을 통해 쌓이는 글자인 strange를 초기화해 준 모습!

 

이제야 마음에 드는구만!

이제 join을 써주기만 하면 끝이다!!

 

완성!

떨리는 마음으로 제출을 해보니...

코드가 길수록 점수를 많이 주는 건가?? 아무튼 성공!


쉬운 문제인데 제법 시간이 걸렸다!

이유가 무엇인고 생각해보니...

 

이중 for문을 사용하니 어느 줄이 어느 for문에 해당하는 것인지, 여기서 돌고 있는 i, w가 뭔지가 헷갈렸다!

몇 번의 시행착오를 겪은 후, 중간중간 주석으로 해당 변수가 무엇인지를 적어줬는데...

이게 제법 도움이 된다! 앞으로도 종종 써먹으면 좋을 듯.

 

또한 띄어쓰기를 해결하는데 애를 먹었는데...

join() 메서드를 염두하고 있었다면 보자마자 생각이 났을 테다!

또한 split()이 문자열을 list로 변환하니... 이 녀석을 다시 문자열로 바꾸기 위해서라도 join()이 필요할 테고!

따라서 결론은? → 많이 써봐야 필요할 때 써먹을 수 있다는 것.

 

다른 사람의 풀이! 나와 가장 유사한 풀이인데...

 

우선 변수 선언을 그리 많이 하지 않았다! for문이나 return값에 그 값을 그대로 써 준 느낌.

 

또한 쌓이는 글자(여기서도 변수명이 word네?)를 첫 번째 for문 안에 적어줌으로써...

단어를 list에 추가하면, 글자는 for문을 돌며 자연스레 초기화가 되도록 해줬다! 와우!

728x90
반응형