일을 하다보면, 개발자적 사고가 필요할 때가 있다.

가령 어떤 작업을 반복적으로 해야할 때가 있는데, 함수를 썼으면 편했겠다 싶으면서도 방법을 떠올리지 못해 멍청하게 일을 할 때가 많다. 😢

 

틈틈이 파이썬도 써볼겸, 프로그래밍 사고도 함양할 겸 기초적인 코딩 문제를 풀었던 내용을 정리하려고 한다.

 

 

문제  

 

- 문제 링크 : 

py.checkio.org/en/mission/caps-lock/

 

Caps Lock mission. python coding challenges - Py.CheckiO

Add short description

py.checkio.org

문제를 간단히 설명하자면, 손가락이 뚱뚱한 Joe는 'a'키를 누르려고 할 때 'a'키 대신 caps lock키를 누르게 된다.

단, 대문자를 입력할 때는 올바르게 'A'키를 누른다.

 

이러한 Joe의 입력체계를 구현하라는 것이 문제이다.

 

내가 작성한 답안

 

def caps_lock(text: str) -> str:
    text_word = text.split("a")
    temp = [ ] 
    for i in text_word :
        if text_word.index(i) % 2 == 1 : 
            i = i.upper()
            temp.append(i)
        else :
            temp.append(i)
    return ''.join(temp)

 

예시로 나온 한 문장인

"Why are you asking me that?"을 예시로 놓고 보면,

 

1. 소문자 a를 기준으로 문자열을 split 해서 list 형태로 만든다.

2. 리스트의 0번째 인덱스, 즉 첫번째는 a가 나오기 전의 상태일 것이므로 이건 그대로 두고, 

1번째 인덱스는 대문자로 변환된 상태, 2번째 인덱스는 다시 caps lock을 눌러 소문자가 된 상태...

즉, 홀수번째 인덱스만 대문자로 변환하면 된다고 생각했다.

3. 홀수번째 인덱스 -> 대문자 변환, 짝수번째 인덱스 -> 문장 유지한 상태로 리스트를 만들고

4. 그걸 다시 문자열로 변환하면 완성된다고 생각했다.

 

저 문제는 내가 작성한 코드로 돌아가기는 한다.

 

다만, 문장 중간에 'a'가 아닌 다른 대문자가 들어갔을 때,

caps lock키가 켜져있다고 인식하지 못하고 수동으로 대문자로 변환하는 처리를 하게 된다면

결과적으로 그 문자는 소문자로 입력될텐데 그 부분에 대한 처리는 어떻게 해야하는지 모르겠다는게 함정이다..😥

 

 

다른 답안

- 링크 : py.checkio.org/mission/caps-lock/publications/review/clear/

 

import re

def caps_lock(text: str) -> str:
    # your code here
    return re.sub(r'a(.*?)(?:a|\Z)', lambda m: m.group(1).upper(), text)

 

 

- 놓쳤던 부분들

 

a ~ a 사이에, 혹은 a부터 문장이 마지막으로 끝나는 부분을 다 대문자로 치환해버린다.

a가 짝수번 등장하든, 홀수번 등장하든 저 로직이면 다 처리되는 것 같다.

 

  • re 라는 정규표현식을 처리할 수 있다는 패키지가 있다.
  • re.sub - 문자를 치환하는 함수.
  • ' ' 앞에 r이 붙여서, \(역슬래시)를 문자 그대로 보겠다고 처리해버린다.
  • a로 시작하고 그 중간에 뭐가 오건 말건 상관없고, a로 끝나거나 아니면 아예 문장끝인 경우에 속하는 부분을 group으로 처리해서 대문자로 바꿔버린다.

 

 

참고 사이트

 

파이썬 구현 동작 확인 : pythontutor.com/

 

Python Tutor - Visualize Python, Java, C, C++, JavaScript, TypeScript, and Ruby code execution

VISUALIZE CODE EXECUTION Learn Python, Java, C, C++, JavaScript, and Ruby Python Tutor helps people overcome a fundamental barrier to learning programming: understanding what happens as the computer runs each line of code. You can use it to write Python, J

pythontutor.com

코딩문제 출처 : https://py.checkio.org/

 

CheckiO - coding games and programming challenges for beginner and advanced

CheckiO - coding websites and programming games. Improve your coding skills by solving coding challenges and exercises online with your friends in a fun way. Exchanges experience with other users online through fun coding activities

checkio.org

 

오늘의 코딩 문제! 끝