본문 바로가기
코딩테스트/백준 준비(과거)

(파이썬) 백준 11654, 11720, 10809, 2675, 1157, 1152, 2908, 5622, 2941, 1316

by junjunjun 2021. 6. 27.
반응형

11654 아스키코드

a = input()
print(ord(a))

ord(문자) : 문자에 맞는 아스키 코드 값 

chr(숫자) : 숫자에 맞는 아스키 코드 문자

 

11720 숫자의 합

n = int(input())
num = list(map(int,input())) #입력문을 한 문자씩 int로 변환한 뒤 list로 바꿔서 sum구해줌
print(sum(num))

# 다른 사람 풀이 : map을 바로 sum으로 감싸줘도 같은 결과.
n = input()
print(sum(map(int,input())))

 

10809 알파벳 찾기

a =[-1]*26    # 결과 배열 -1로 초기화 해줌 
alp = input()
for i, n in enumerate(alp): #enumerate 사용 index랑 값 둘다 가져옴
    x = 26+ord(n)-122-1     # 문자의 아스키 코드 값을 형식에 맞게 설정 ex) a=0 ,b=1 ,c=2  ...z=25
    if a[x] != -1: continue # 이미 인덱스값 존재하면 패스
    a[x] = i                # 문자 인덱스 값 넣어줌
print(" ".join(map(str,a))) # for문 쓰기 귀찮아서 join으로 출력해줌

emuerate : index랑 배열값을 동시에 사용할 수 있음.

join : 배열을 문자열로 변환시켜줌

# 다른 사람 풀이
word = input()
alphabet = list(range(97,123))
for x in alphabet :
    print(word.find(chr(x))) 

a~z까지 돌면서 find함수(찾는 문자가 없으면 -1반환)를 통해 word에 값이 존재하면  그 값의 인덱스를 반환해줌

 

2675 문자열 반복

n = int(input())
result = []
for i in range(n):
    r,s = input().split()
    m = ""
    for i in s:
        m = m + i*int(r)
    result.append(m)
    
for i in result:  # 출력   
    print(i)

 

1157 단어 공부

s = input()
upS = s.upper() # 대문자로 변환
freq = [0]*26   # 빈도수 배열 생성

for i in upS:
    idx = ord(i)-90 +25 # 배열에 넣기 위해 아스키코드 재설정
    freq[idx] +=1       # 해당 문자 인덱스에 1추가
    
maxN = max(freq)        # 가장 빈도수가 많은 수 찾음
if freq.count(maxN) >1: # 가장 큰 빈도수가 여러개면 ? 출력
    print("?")
else:
    print(chr(freq.index(maxN)+ord("A"))) # 가장 큰 빈도수의 인덱스에 해당하는 문자 출력

https://ooyoung.tistory.com/70 <- 이 분의 풀이법이 더 시간이 덜 걸리고 아스키코드를 몰라도 됨.

또 보기도 쉬움.

 

1152 단어의 개수

a = input()
count = len(a.split())
print(count)

 

2908 상수

n = input().split()
revN = [i[::-1] for i in n]  # 각 수를 역순으로 바꿔줌 (slice)
intN = map(int,revN)         # 각 수를 int형으로 변환
print(max(intN))             # 큰 값 반환

 

5622 다이얼

m = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
a = input()
count = 0
for i in range(len(a)):   # 문자를 돌면서
    for j in m:           # 알파벳 돌면서
        if a[i] in j:           # m에 문자가 있으면
            count+=m.index(j)+3 # 초 더해줌
print(count)

 

2941 크로아티아 알파벳

cro = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

a = input()
for i in cro:
    a = a.replace(i,'1')   # 크로아티아 문자를 하나로 바꿔줌
print(len(a))

replace는 정말 편리하다.

 

1316 그룹 단어 체커

n = int(input())

for i in range(n):
    m = input()                   # 문자 입력받음
    for i in range(len(m)-1):     
        if m[i]!=m[i+1]:          # 연속되는 문자가 아닐때
            if m[i] in m[i+1:]:   # 현재 문자가 뒤에 또 존재할 경우 n-1해줌
                n-=1
                break
print(n)

찾아보니 정렬해서 찿는 방식도 있었다.

# 출처 https://aisiunme.github.io/algorithm/2018/08/13/baekjoon-group-word-checker-1316.md/
result = 0
for i in range(int(input())):
    word = input()
    if list(word) == sorted(word, key=word.find):
        result += 1
print(result)

 

반응형

댓글