본문 바로가기

알고리즘/백준

0813 백준 알고리즘 1152, 2908, 5622, 2941 풀이

1152 단어의 개수 

 

문제

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

출력

첫째 줄에 단어의 개수를 출력한다.

 

a = input().split()

print(len(a))

 

 

2908 상수

 

문제

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

출력

첫째 줄에 상수의 대답을 출력한다.

 

a, b = input().split()

newa = []
newb = []
for i in range(2, -1, -1):
        newa.append(a[i])
        newb.append(b[i])



if int(''.join(newa)) > int(''.join(newb)):
    print(int(''.join(newa)))

elif int(''.join(newa)) < int(''.join(newb)):
    print(int(''.join(newb)))

 

5662 다이얼

문제

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

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

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

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

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

입력

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어는 2글자~15글자로 이루어져 있다.

출력

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

 

lis = [['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']]

a = input()
la = []
for i in range(len(a)):
    for j in range(len(lis)):
        if a[i] in lis[j]:
            la.append(j+2)

sum = len(la)

for i in range(len(la)):
    sum += la[i]
    
print(sum)

 

 

2941 크로아티아 알파벳

 

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳변경

č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

 

b = input()
a = []
for i in range(len(b)):
    a.append(b[i])

for i in range(0, len(a)-1):
    if a[i] == 'c':
        if a[i+1] == '=' or a[i+1] == '-':
            a[i] ='1'


    elif a[i] == 's':
        if a[i+1] == '=':
            a[i] = '1'


    elif a[i] == 'z':
        if a[i+1] == '=':
            a[i] = '1'


    elif a[i] == 'l':
        if a[i+1] == 'j':
            a[i] = '1'


    elif a[i] == 'n':
        if a[i+1] == 'j':
            a[i] = '1'


    elif a[i] == 'd':
        if a[i+1] == '-':
            a[i] = '1'


        if i < len(a)-2:
            if a[i] == 'd':
                if a[i + 1] == 'z':
                    if a[i + 2] == '=':
                        a[i] = '1'
                        a[i+1] = '1'


sum = len(a)
for i in range(len(a)):
    if a[i] == '1':
        sum -= 1

# print(a)
print(sum)

음 엄청 어렵게 풀었다...... 다른 쉬운 코드 공유

 

a=input()
print(len(a)-a.count("=")-a.count("dz=")-a.count("-")-a.count("lj")-a.count("nj"))

count를 아직 잘 사용 못하는데 사용하는데 익숙해지자!

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

[백준]greedy_11399 ATM  (0) 2020.08.19
[백준]greedy_11047 동전0  (0) 2020.08.18
백준 8958, 4344, 1546  (0) 2020.08.16
0814 백준 1712, 2839  (0) 2020.08.14
0812 백준 알고리즘 11720, 10809, 2675, 1157 풀이  (0) 2020.08.12