백준 5~6단계 코딩테스트

릿·2023년 2월 21일
0

1. 다이얼

문제: 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.

전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.

숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

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

출력: 첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.

1. 내 풀이

알파벳 인덱스에 맞게 숫자배열을 만들어 준 다음, 해당 알파벳의 인덱스가 나오면 li에서 해당 인덱스 숫자+1을 sum에 누적시켜 줌

n = input()
li = [2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9]
sum = 0

for i in range(len(n)) :
    for j in range(26) :
        if n[i] == chr(j +65) :
            sum += li[j] + 1
print(sum)

2. 킹, 퀸, 룩, 비숍, 나이트, 폰

문제: 동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다.

체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다.

체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다.

동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오.

입력: 첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.

출력: 첫째 줄에 입력에서 주어진 순서대로 몇 개의 피스를 더하거나 빼야 되는지를 출력한다. 만약 수가 양수라면 동혁이는 그 개수 만큼 피스를 더해야 하는 것이고, 음수라면 제거해야 하는 것이다.

1. 내 풀이

li = list(map(int, input().split()))
compareLi = [1, 1, 2, 2, 2, 8]

for i in range(6) :
     if li[i] == compareLi[i] : print(0, end=' ')
     else : print(compareLi[i] - li[i], end=' ')

3. 별 찍기

문제: 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력: 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력: 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

1. 내 풀이

반대쪽 별 찍기는 거의 어거지로 맞추긴 했는데 흠...

n = int(input())

for i in range(n) :
    for j in range(n-i-1) :
        print(' ', end='')
    for k in range(i*2+1) :
        print('*', end='')
    print()

for i in range(n) :
    for j in range(i+1) :
        print(' ', end='')
    for k in range((n-i-1)*2-1) :
        print('*', end='')
    print()

2. 다른 사람의 풀이

내가 for문을 6개 쓸 때 2개로 쓴 멋진 사람...

a=int(input())
for i in range(1,a+1):
    print(' '*(a-i)+'*'*(2*i-1))
for i in range(1,a):
    print(' '*i+'*'*(2*a-2*i-1))
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글