코딩테스트 준비

[Python] 오늘의 코딩 문제: 문자열

graph-dev 2023. 12. 15. 14:21
728x90

 

문자와 python

ord()를 통해, 문자를 아스키코드로 바꾼다.

대소문자를 서로 바꾸는 코드를 작성해보았다.

https://stackoverflow.com/questions/227459/how-to-get-the-ascii-value-of-a-character

 

How to get the ASCII value of a character

How do I get the ASCII value of a character as an int in Python?

stackoverflow.com

str = input()

result = ""
for s in str:
    if(ord(s) <= 90):
        result += s.lower()
    else:
        result += s.upper()

print(result)

 

 

근데 다른 사람 코드를 보니 신박한게 많다.

print(input().swapcase())

 

 

그냥 isupper() 메서드를 써도 될 것 같기는 하다.

str = input()
for i in str:
    if i.islower():
        print(i.upper(),end='')
    else:
        print(i.lower(),end='')

 

 

string 호출하는 경우도 있다.

import string

str = input()
for s in str:
    if s in string.ascii_lowercase:
        print(s.upper(), end = "")
    else:
        print(s.lower(), end = "")

 

 

특수문자 출력

조금 고민을 해보았다. r을 앞에 붙이면 python은 인식하는 것으로 보인다.

print(r'!@#$%^&*(\'"<>?:;')

 

raw 를 의미하는 r로, regex 에서 pattern 설정 시 escape 문자로 쓴다.

 

그 다음은 정석인 \ 백스페이스 문자를 추가한다.

str1='''!@#$%^&*(\\'"<>?:;'''
print(str1)

 

그렇게 마무리할 수 있다. Python은 생각보다 다양한 방법이 많다. 문자를 다루는 방법을 익숙해질 때까지 반복해야한다.

 

 

 

replace()의 함정: 앞자리부터

문제를 풀다가 특이한 경우를 발견한다.

answer = my_string.replace(my_string[s:s+len(overwrite_string)], overwrite_string, 1)

 

문제는 my_string에서 s번째 인덱스부터 overwrite_string으로 치환하는 문제다. 그런데 replace 메서드는 앞에서부터 찾아서 바꾸므로, 주어진 인덱스부터 바꾸는 것이 적용되지 않는 경우가 생긴다.

 

결국 하나씩 바꾼다.

def solution(my_string, overwrite_string, s):
    
    answer = my_string[:s] + overwrite_string + my_string[s+len(overwrite_string):]
    return answer

'코딩테스트 준비' 카테고리의 다른 글

[PCCP 모의고사 1회] 1. 외톨이 알파벳  (0) 2023.12.11
[Java] 파일 정리  (0) 2023.06.19
[Java] 럭키 스트레이트  (0) 2023.06.01
[Java] 서울에서 김서방 찾기  (0) 2023.04.18