티스토리 뷰

2022년입니다! 새해 복 다들 듬뿍 받으세요 :)

 

7단계 정답 코드는 아래 제 깃허브에서도 확인하실 수 있습니다.

https://github.com/kmi0817/coding_test_practice/tree/main/baekjoon_step/step7


 

1. 아스키 코드 (11654번)

  • ord() : 아스키 코드를 반환합니다.
your_input = input()

print(ord(your_input))

 

 

2. 숫자의 합 (11720번)

N = int(input())
if N < 1 or N > 100 :
    exit()

numbers = input()
sum_result = 0
for n in numbers :
    sum_result += int(n)

print(sum_result)

 

 

3. 알파벳 찾기 (10809번)

  • find('문자') : 문자열에서 해당 문자의 인덱스 위치를 반환합니다. 해당 문자가 없을 경우 -1 반환합니다.
from string import ascii_lowercase

S = input()

alphabet_list = list(ascii_lowercase)
for alphabet in alphabet_list :
    print(S.find(alphabet), end=" ")

 

 

4. 문자열 반복 (2675번)

  • 파이썬에선 "문자열" * 숫자를 하면 문자열을 숫자만큼 반복해서 출력합니다.

이 기능 덕분에 정말 간단하게 코드를 완성했습니다 :) 파이썬 정말 좋아요 ㅎㅎ

T = int(input())
if T < 1 or T > 1000 :
    print("1<= T <= 1,000")
    exit()

for i in range(T) :
    R, S = input().split()
    R = int(R)

    if R < 1 or R > 8 :
        exit()
    if len(S) < 1 or len(S) > 20 :
        exit()

    new_str = ""
    for c in S :
        new_str += c * R
    print(new_str)

 

 

5. 단어 공부 (1157번)

  • count('문자') : 리스트 내 해당 문자의 등장 회수를 반환합니다.
from string import ascii_uppercase

S = input().upper()
alphabets = list(ascii_uppercase)

frequent = ""
cnt = 0
for alphabet in alphabets :
    temp_cnt = S.count(alphabet)

    if cnt < temp_cnt :
        cnt = temp_cnt
        frequent = alphabet
    elif cnt == temp_cnt :
        frequent = "?"

print(frequent)

 

  • 기존 152ms에서 96ms로 속도 개선 (2023-05-24)
s = input().upper()

alphas = set(s)

count = {ch: s.count(ch) for ch in alphas}
r_count = {s.count(ch): ch for ch in alphas}

biggest = max(count.values())

if list(count.values()).count(biggest) > 1:
    print('?')
else:
    print(r_count[biggest])

 

6. 단어의 개수 (1152번)

주석 처리된 코드는 처음에 작성한 코드인데, 틀렸다고 나옵니다. 수정한 코드와 처음에 작성한 코드 간 차이점은 입력한 문자열의 길이를 체크하는 것밖에 없습니다...ㅠ

1152번 입력

입력에 있는 조건은 굳이 코드에서 체크할 필요가 없는 것인지 궁금하네요. 지금까지는 나름 체크를 다 하려고 노력했는데 말이죠.

 

  • strip() : 문자열의 앞뒤 공백 문자를 제거합니다. "또한 문자열은 공백으로 시작하거나 끝날 수 있다"이라는 입력 내용 때문에 사용했습니다. 근데 사실 split() 사용해서 별로 필요 없을 것 같기도 하고.
S = input().strip().split()
print(len(S))


# S = input().strip()
# if len(S) > 1000000 or len(S) < 1 :
#     exit()

# S_list = S.split()
# print(len(S_list))

 

 

7. 상수 (2908번)

은근 변수 명명이 어려워요...

  • reversed(리스트) : 리스트의 원소 순서가 뒤바뀐 리스트를 반환합니다. (원본 리스트는 변화X)
  • join() : 리스트를 문자열로 변환합니다.
def make_str_2_list(string) :
    ret_list = list()
    for c in string :
        ret_list.append(c)

    return ret_list

###
A, B = input().split()

reversed_A_list = reversed(make_str_2_list(A))
reversed_B_list = reversed(make_str_2_list(B))

reversed_A_str = "".join(reversed_A_list)
reversed_B_str = "".join(reversed_B_list)

reversed_A = int(reversed_A_str)
reversed_B = int(reversed_B_str)

print(max([reversed_A, reversed_B]))

 

 

8. 다이얼 (5622번)

alphabets 리스트 내 원소의 인덱스 + 1은 전화기의 숫자이고,

숫자 1은 2초, 2는 3초, 3은 4초... 이런 식으로 숫자 + 1만큼의 시간이 걸리기 때문에

index + 2가 바로 해당 숫자(인덱스+1)를 누르는 데 필요한 시간이 됩니다.

alphabets = ["", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"]

string = input()

minimum_time = 0
for char in string :
    for index, chunk in enumerate(alphabets) :
        if char in chunk :
            minimum_time += (index + 2)

print(minimum_time)

 

 

9. 크로아티아 알파벳 (2941번)

문자열의 전체 길이에서, 크로아티아 특수 문자(?)의 개수를 뺏습니다!

croatia_alphabet = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="]
check_alphabet = ["c", "d", "l", "n", "s", "z"] # z, j 제외

###
S = input()

total_length = len(S)
special_cnt = 0
for i in range(len(S)) :
    if S[i] in check_alphabet :
        char_2 = S[i:i+2]
        char_3 = S[i:i+3]

        if char_3 == "dz=" :
            special_cnt +=1
        elif char_2 in croatia_alphabet :
            special_cnt += 1
print(total_length - special_cnt)

 

 

10. 그룹 단어 체커 (1316번)

  • 1번째 if문 - 이전 문자와 현재 문자가 다른데, 현재 문자가 이미 나온 적이 있는 문자라면 그룹 단어가 아닙니다. ex) aaabba
  • 2번째 if문 - 이전 문자와 현재 문자가 다른데, 현재 문자가 그 동안 나온 적 없는 문자라면 아직 그룹 단어가 될 가능성이 있습니다.
import sys
N = int(input())

group_word_cnt = 0
for i in range(N) :
    exit_chars = list()
    former_char = ""
    is_group_word = True

    word = sys.stdin.readline().lower()

    for char in word :
        if char != former_char and char in exit_chars :
            is_group_word = False
            break
        elif char != former_char and char not in exit_chars :
            exit_chars.append(char)

        former_char = char
    
    if is_group_word :
        group_word_cnt += 1

print(group_word_cnt)

 


백준 단계별로 풀어보기 6단계 정답 코드는 아래 링크를 클릭해주세요 :)

 

백준 단계별로 풀어보기 6단계 함수 파이썬 정답

5단계와 6단계 난이도 차이가 갑자기 나는 것 같아요. 그래서 더욱 풀 맛이 납니다 ㅎㅎ 6단계 정답코드는 아래 제 깃허브에서도 찾아보실 수 있습니다 :) https://github.com/kmi0817/baekjoon_step/tree/main/st

thisismi.tistory.com

 

728x90