Today I Learned

[TIL] PS 강의 Sec.01-7 / 문자열과 내장함수, 백준 2440, 백준 5622 다이얼 런타임 에러 [21-11-05]

목차

TIL

- 알고리즘 강의 1-7 문자열과 내장 함수

- 백준 2440

- 백준 5622

 


TIL

 오늘 정말 정신이 없었다. 맥북도 환경 설정을 해야 하고, 다시 위에서 공부할 거를 생각하니, 공부에 집중이 잘 안된다. 여기에 완전히 몰두를 이제 해야겠지? 너무 기대된다. 그 환경 속에서 얼마나 성장할지 생각하니, 가슴이 두근거린다.

 

알고리즘 강의 1-7

https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8

 

파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의

파이썬을 이용한 코딩테스트 문제풀이를 합니다., [사진] 강좌를 다음과 같이 공부해 문제해결력을 기르기 바랍니다. 1. 문제와 자동채점폴더를 제공하니, 영상을 보기 전에 꼭 먼저 문제를 스스

www.inflearn.com

 ord와 chr 함수는 문제 풀이를 위해 알고 있었지만, upper, lower, count, find, islower, isupper, isalpha 등 정말 강력하고 중요한 내장 함수를 배웠다. 이 강력한 내장 함수를 사용하면 문자열을 마음대로 주무 룰 수 있을 것만 같다.

 

 

Sec.1-7 문자열과 내장 함수

'''
문자열과 내장함수
'''
msg = "It is Time"
# 문자열 내장함수 upper
print(msg.upper())

# 문자열 내장함수 lower
print(msg.lower())
print(msg)

# tmp에 msg변수에 담긴 값이 upper 된 값이 들어감
tmp = msg.upper()

print(tmp)

# 문자열 내장함수 find
print(tmp.find('T'))
print(tmp.count('T'))
print(msg)

# slice 기능 해당String 인덱스 전 까지만
print(msg[:2])
print(msg[3:5])
print(len(msg))

# for 문으로 하나씩 접근
for i in range(len(msg)):
    print(msg[i], end=' ')
print()

# for in 으로 접근
# msg 문자 하나하나로 접근
for x in msg:
    print(x, end=' ')
print()

# isupper 내장 함수
# msg 에서 꺼내와서 x가 대문자면 출력
for x in msg:
    if x.isupper():
        print(x, end='')
print()

# islower 내장 함수
# msg 에서 꺼내와서 x가 소문자면 출력
for x in msg:
    if x.islower():
        print(x, end='')
print()

# isalpha 내장 함수
# 공백 제외, 알파벳만 출력
for x in msg:
    if x.isalpha():
        print(x, end='')
print()

# ord 내장 함수
# String의 ascii 코드 출력
tmp = 'AZ'
for x in tmp:
    print(ord(x))

tmp = 'az'
for x in tmp:
    print(ord(x))

# chr 내장 함수
# 수를 String으로 출력
tmp = 65
chr(tmp)

 

 

백준 2440 별 찍기 - 3

https://www.acmicpc.net/problem/2440

 

2440번: 별 찍기 - 3

첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제

www.acmicpc.net

  간단하지만, 생각보다 푸는 데 오래 걸린 것 같다. 처음에 in에 그냥 int를 넣어서 뜨는 오류에 당황했는데, 다시 보니 이게 리스트 같이 뭔가를 꺼내서 쓸 수 있는 것이 아니면 쓸 수 없다는 것을 알았다.

 

n = int(input())
for i in range(0, n):
    for j in range(n - i):
        print('*', end='')
    print()

문제 풀이 시간 7분 내외

 

 

백준 5622 다이얼 런타임 에러

https://www.acmicpc.net/problem/5622

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

 하나하나 다 읽어서 파싱 해줘야 하는데, 어떻게 해야 할까, 시간 복잡도 때문에 RuntimeError나 버렸다.  elif를 모두 다 걸러서 나오는데, 이거를 해결할 방법이 없을까?

 

_str = input()
_str_arr = []

for i in range(len(_str)):
    _str_arr.append(_str[i])


output = 0


def _checker(_input_str):
    if 65 <= ord(_input_str) <= 67:
        return 3
    elif 68 <= ord(_input_str) <= 70:
        return 4
    elif 71 <= ord(_input_str) <= 73:
        return 5
    elif 74 <= ord(_input_str) <= 76:
        return 6
    elif 77 <= ord(_input_str) <= 79:
        return 7
    elif 80 <= ord(_input_str) <= 82:
        return 8
    elif 83 <= ord(_input_str) <= 85:
        return 9
    elif 86 <= ord(_input_str) <= 88:
        return 10


for i in range(len(_str_arr)):
    output += _checker(_str_arr[i])

print(output)

문제 투자 시간 26분 47초