본문 바로가기
백준/python

[Python/백준2744] 대소문자 바꾸기 - swapcase, upper와 lower

by EATSTAR 2024. 6. 9.
반응형
문제 제시

 

 

나의 코드
T = list(input())
lower_alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
upper_alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

for i in range(len(T)):
    if T[i] in upper_alpha:
        T[i] = T[i].lower()
    elif T[i] in lower_alpha:
        T[i] = T[i].upper()

for i in range(len(T)):
    print(T[i], end='')

나의 코드다. 살짝 비효율적인 면이 있는데, 이 코드가 작동하는 방식을 알려주기에는 좋다고 생각한다.

사실 아래와 같이 upper_alpha라는 배열을 제거하고 if-else문으로 작성해도 문제 없을 것이다.

또 배열에 저장하고 print를 한꺼번에 할 필요없이, 바로바로 print 해줄 수도 있을 것이다. 코드를 고쳐보면..

T = list(input())
lower_alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

for i in range(len(T)):
    if T[i] in lower_alpha:
        print(T[i].upper(), end='')
    else:
        print(T[i].lower(), end='')

 

일단 문자열 T를 리스트로 받는다. 그리고 T 배열의 길이만큼 각 문자마다 lower_alpha 배열에 속하는지, upper_alpha 배열에 속하는지 판단한다. 그리고 각각 바꿔준 것을 공백없이 이어서 출력한다.

 

다른사람의 코드

 

아스키코드 이용

 

a=input()
for i in a:
     if 'A'<=i and i<='Z':
          print(chr(ord(i)+32),end="")
     else:
          print(chr(ord(i)-32),end="")

 

입력과 for문부터 다르다. 이 사람은 배열을 이용하지 않았고, a 변수 그 자체를 내가 쓴 배열처럼 사용했다. (실제로는 그냥 문자열이지만)

처음이 배열, 그 다음이 문자열로 입력받은 방식. 두 입력방식에는 차이가 있기에 당연히 for문 구성도 다르다.

 

그리고 print도 그때그때마다 해줬다.

효율적으로 ASCII코드를 이용하여 작성했는데, 만약 i의 ASCII코드가 A보다 크거나 같고, Z보다 작거나 같다면 대문자이므로 소문자는 아스키코드 번호가 대문자+32인 것을 이용해서 i를 ord함수를 이용해 아스키 코드로 변환하고, chr로 그것을 다시 문자로 나타냈다. 즉 chr과 ord는 반대 관계인 함수다.

 

 

swapcase 함수 이용

 

a = input() 
a = a.swapcase()
print(a)

와우. 이렇게 단순할 수가 있었던가?

내가 쓴 .upper나 .lower도 쓸만하다고 생각했는데, swapcase면 그냥.. 문자열이 통째로 대소문자가 바뀐다.

이것이 함수 사용의 중요성인 것 같다.

 

isupper, islower 함수 이용
n = input()
a = []
for i in n:
    if i.isupper() == True:
        a.append(i.lower())
    else:
        a.append(i.upper())
print(''.join(a))

사실 isupper()로 대문자를 확인하고, islower()로 소문자를 확인하는 함수가 있었다..

그럼 내가 배열로 일일이 소문자로 나열한 것이 무용지물이 된다. 역시 함수의 중요성이다.

내가 짠 코드의 진화판이다.

반응형

'백준 > python' 카테고리의 다른 글

[Python/백준15552] sys 모듈을 활용한 빠른 입력  (0) 2024.05.24