Algorithm/백준 단계별로 풀어보기

[백준 알고리즘/Python] 문자열

베이비코더 2021. 9. 7. 22:44
반응형
1단계 11654번 아스키 코드
character = input()
print(ord(character))

ord 함수에 문자를 넣으면 해당 문자의 아스키 코드값을 반환한다.

 

2단계 10809번 숫자의 합
N = int(input())
num = input()

sum = 0
for i in num:
    sum += int(i)
print(sum)

 

3단계 10809번 알파벳 찾기
S = input()

resultList = [ -1 for _ in range(26)]

count = 0
for i in S:
    alphabet = ord(i) - 97
    if resultList[alphabet] != -1:
        count += 1
        continue
    resultList[alphabet] = count
    count += 1

for j in resultList:
    print(j, end=' ')

알파벳 소문자의 개수(26개)만큼 -1로 채워진 resultList를 만들었다.

count는 알파벳이 몇 번째인지 등장 순서를 나타낸다.

for문으로 입력받은 S를 조회하면 i는 첫 번째 글자부터 하나하나 참조하게 된다.

 

a의 아스키코드값은 97이다.

ord(a) - 97 = 0 이기 때문에 resultList[0]은 a의 자리, resultList[1]은 b의 자리, ... resultList[25]는 z의 자리를 나타낸다.

 

resultList[alphabet]의 값이 -1이 아니면 이미 그 자리의 알파벳은 나왔던 문자이기 때문에 count만 하나 올려주고 continue하여 바로 for문의 다음 차례를 실행하도록 했다. 

 

4단계 2675번 문자열 반복
T = int(input())

for i in range(T):
    num, char = input().split()
    P = ''
    for j in char:
        P += j * int(num)
    print(P)

테스트 케이스 T 만큼 for문을 반복한다.

num에는 반복할 횟수를 받고, char은 문자를 받는다.

결과에 나타낼 P는 공백으로 선언해두고, j가 char의 한 글자씩 참조할 때 입력받은 num만큼 곱해서 P에 추가해준다.

 

5단계 1157번 단어 공부
word = input().upper()

alphabetList = [ 0 for _ in range(26) ]

for i in word:
    alphabetList[ord(i)-65] += 1

maxNumber = max(alphabetList)
if alphabetList.count(maxNumber) > 1:
    print('?')
else:
    for i in range(26):
        if alphabetList[i] == maxNumber:
            print(chr(i+65))

입력한 단어가 다 대문자가 되게 해주었다.

입력한 단어의 각 자리 알파벳은 순서에 따라 리스트에 카운트 해줬다.

 

이 리스트에서 제일 큰 수를 구하고 이 수가 리스트에 1개보다 많으면 '?'를 출력한다.

그렇지 않으면(제일 큰 수가 1개 있을 때) 이 큰 수가 몇 번째 방에 있는지 찾아 그 방에 해당하는 알파벳을 출력한다.

 

6단계 1152번 단어의 개수
word = list(map(str, input().split()))

print(len(word))

 

7단계 2908번 상수
A, B = input().split()

A = list(A)
A.reverse()
B = list(B)
B.reverse()

strA=''
strB=''
for i in range(3):
	strA += A[i]
	strB += B[i]

if int(strA) > int(strB):
	print(strA)
else:
	print(strB)

입력 받은 두 수를 반대로 뒤집어주고 두 수를 비교했다.

제출하고 다른 사람들의 코드를 봤는데 join 함수를 써서 푼 코드들이 많아서 나도 join을 사용해서 한 번 더 풀어보았다.

A, B = input().split()

A = list(A)
B = list(B)

A.reverse()
B.reverse()

if int(''.join(A)) > int(''.join(B)):
	print(''.join(A))
else:
	print(''.join(B))

join()은 매개변수로 들어온 리스트의 요소들을 합쳐주는데,

''.join(A) 처럼 쓰였을 땐 앞에 '구분자'를 사용해서 합쳐준다.

 

8단계 5622번 다이얼
def returnSec(char):
	charNum = ord(char)
	if 65<=charNum<=67:
		return 3
	elif 68<=charNum<=70:
		return 4
	elif 71<=charNum<=73:
		return 5
	elif 74<=charNum<=76:
		return 6
	elif 77<=charNum<=79:
		return 7
	elif 80<=charNum<=83:
		return 8
	elif 84<=charNum<=86:
		return 9
	elif 87<=charNum<=90:
		return 10

word = input()

resultSec = 0
for i in word:
	resultSec += returnSec(i)

print(resultSec)

 

9단계 2941번 크로아티아 알파벳
croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

word = input()

for i in croatia:
    word = word.replace(i, 'a')
print(len(word))

replace함수를 사용해 크로아티아 알파벳이 있으면 a로 치환을 해주고 총 단어의 길이를 출력한다.

 

10단계 1316번 그룹 단어 체커
n = int(input())

count = n
for _ in range(n):
    word = input()
    for i in range(len(word)-1):
        if word[i] != word[i+1]:
            if word[i] in word[i+1:]:
                count -= 1
                break
print(count)

기준이 되는 글자 i가 다음 글자와 같지 않을 경우,

다음 글자 뒤로 i와 같은 글자가 있는지 비교하고 있을 경우 입력한 총 단어의 개수에서 빼주고 다음 단어 입력을 받도록 break 해준다.

반응형