[BAEKJOON] 5단계_문자열 본문

IT/코테문제

[BAEKJOON] 5단계_문자열

호랑구야 2023. 10. 23. 09:00

 

julia319 정보

시도했지만 맞지 못한 문제

www.acmicpc.net

10809번 알파벳 찾기

알파벳을 일일히 쓰기 싫어서 알파벳의 위치값인 아스키코드를 활용했다. ord()함수로 위치를 찾아내고, 활용할 리스트의 인덱스가 0부터 시작하므로 a의 아스키코드인 97을 빼 0으로 맞추었다.

혹은 일단 알파벳의 갯수길이만한 리스트에 -1을 배정하고, 주어진 문자를 enumerate해서 순서대로 문자의 아스키코드를 ord로 확인한 후 그 숫자를 a의 아스키코드만큼 빼준 것을 리스트의 인덱스 값으로, 위의 enumerate해서 얻은 리스트의 갯수 인자를 리스트의 값으로 배정했다. 다만 단어에서 그 알파벳이 나타난 처음 등장하는 위치를 표현한다고 했으므로, 리스트의 값이 처음 배정한 -1인 경우에만 배정한다.

S = input()

L = [-1] * 26

num = ord('a')

for _, i in enumerate(S):
    alp = ord(i) - num
    if L[alp] == -1:
        L[alp] = _
    
for a in L:
    print(a, end = ' ')

2675번 문자열 반복

반복된 문자열을 출력할 때, 공백이나 줄바꿈이 없어야 했으므로 end = ''을 주었는데, 문제는 다음 테스트 케이스를 받았을 때에는 줄이 바뀌어야 한다는 것이었다. print()만 사용할 경우 줄바꿈이 되므로 줄바꿈 인자를 바꿨을 경우 적절한 곳에 print()를 사용할 것.

T = int(input())

for _ in range(T):
    R, S = input().split()
    
    R = int(R)
    
    for i in S:
        print(i * R, end = '')
    print()

 

1152번 단어의 개수

처음에는 단어 사이의 공백의 수를 세어서 +1을 했지만, 반례인 문장의 맨 앞과 맨 뒤에 공백이 있는 경우 혹은 공백으로만 이루어진 문자열일 경우를 놓쳤다. 그냥 공백을 기준으로 단어를 인식하는 리스트를 만들어 그 리스트의 길이, 단어의 수로 처리했다.

S = input().split()

print(len(S))

5622번 다이얼

아스키 코드를 활용해 A부터 R까지는 56을 빼 3으로 나눈 몫을 시간으로 두고, Z 일때는 10으로, 나머지는 57을 빼서 3으로 나눈 것의 몫을 시간으로 두었다. 코드를 어떻게 짜야 가독성과 메모리 사용이 적은지 궁금하다. 반복되는 것을 지우려고 보니 if문을 중첩하게 되는데, 반복문의 중첩이 시간복잡도를 늘리는 것은 알지만, 조건문도 그런지 정확하지 않아 일단 중첩을 하지 않아보려고 한다. 더 좋은 방법이 있다면 고쳐봐야지!

혹은 코드의 가독성을 위해 변수를 배정하고, 반복되는 부분에 따라 조건문 순서를 재배열 했다.

S = input()
time = 0

for s in S:
    alp = ord(s)
    
    if alp == ord('Z'):
        time += 10

    else:
        if alp < ord('S'):
            alp -= 56
        else:
            alp -= 57
            
        div_3 = (alp // 3)
        time += div_3
        
print(time)
반응형

'IT > 코테문제' 카테고리의 다른 글

[Python] 문제 풀 때 요령_231014  (0) 2023.10.25
[BAEKJOON] 6단계_심화1  (1) 2023.10.24
[BAEKJOON] 4단계_1차원 배열  (0) 2023.10.20
[BAEKJOON] 3단계_반복문  (1) 2023.10.19
[BAEKJOON] 2단계_조건문  (0) 2023.10.18
Comments