String 변형 메서드를 다루는 만큼 전혀 어렵지는 않지만 이걸 어떻게 가장 간결한 코드로 구현해낼지 고민이 되었던 문제. 아직도 이게 최선인지는 의문이다. 가장 간단한 것이 가장 어려운 것 같다.
문제 풀이
문제 해석
주어지는 문자열의 소문자는 대문자로, 대문자는 소문자로 바꾸어 출력하라.
문제 풀이
Pseudocoding
- 주어지는 문자열에는 숫자도 있고, 공백도 있으니 일단 알파벳인지 확인하기
- 문자에 대해서 작업하는 if문
isalpha()
넣기 isalpha()
가 참인 애들은islower()
또는isupper()
중 하나를 써서 삼항조건연산문으로 작업해서 변수에 넣어주기isalpha()
가 거짓인, 즉 알파벳이 아닌 애들은 그냥 그대로 변수에 넣어주기- 넣은 변수를 빈 list에 담아주는데, string은 인덱스값으로 조회할 수 있으니 for문을 돌리며 작업이 가능할 것.
- for문으로 하나하나 작업된 문자열이 들어간 list를
join()
으로 이어붙여 리턴하기.
이미 주어진 코드 해석
1 | def swap_case(s): |
- 친절한 HackerRank가 인풋을 받아 s에 넣어주고, 내가 만들 함수의 인수로 s를 전달해주었다.
- 내가 만들 함수
swap_case()
가 리턴한 값을 변수 result에 넣어 출력까지 해주었으니 나는 묵묵히 함수만 잘 만들면 된다.
코드 작성하기
1 | def swap_case(s): |
- string이 immutable이라서 res라는 변수를 만들어 작업했는데 이게 최선이겠지…?
- char이라는 변수에 s의 각 문자를 담았다가 나중에 append하는 게 좋을지, 아니면 if와 else문에서 바로 append하는게 좋을지 고민하다가 가독성을 위해 char을 한 번 거쳐가기로 했다.
res.append(char)
말고res.insert(i, char)
도 동일한 결과를 내지만 인수를 하나라도 덜 쓰는 게 좋을 것 같아서 그냥 append로 고!
느낀 점
- 쉬운 문제일수록 누구나 풀 수 있기 때문에 어떻게 하면 내가 차별화된 좋은 코드를 짤 수 있을지 고민하게 된다. 이런 걸 보면 차라리 어려운 문제가 나은 것 같기도…?