백준 (3) 문자열 알고리즘
(11720, 8958, 1152, 10809,
1157, 9012, 11718)
백준 관련 글
- 백준 (1) (2557, 8958, 1000, 1001, 1008, 2935, 2753, 2884, 5063, 4101)
- 백준 (2) (1018, 1085, 1181, 1259, 1436, 1654, 1874, 1920)
- 백준 (3) 문자열 알고리즘(11720, 8958, 1152, 10809, 1157, 9012, 11718)
- 백준 (4) (1157, 1546, 2577, 2675, 2908, 1018, 1436, 1259, 7568, 10250)
- 백준 (5) 정렬 알고리즘(2750,11399,2751,1427, 10989,1181,11650)
- 백준 (6) (3085, 2563, 4673, 5635, 11170)
- 백준 (7) 스택 알고리즘(10828,10773,1874,10799, 4949,1406,2493)
- 백준 (8) 큐 알고리즘(10845,1158,1966,2164,11866,18258)
- 백준 (9) 우선순위 큐 알고리즘 (1927,11279,11286,1715,11766)
문자열에 관련된 7문항을 풀어보았다.
https://www.acmicpc.net/problemset?sort=ac_desc&algo=158
11720번 숫자의 합
https://www.acmicpc.net/problem/11720
공백없는 숫자들의 합구하기
방법 1. for문을 이용해서 풀기
n=int(input())
m=input()
5
54321
range를 이용한 풀이 방법
result=0
for i in range(n):
result=int(m[i])+result
print(result)
15
m을 읽어가면서 더해주는 방법
result=0
for i in m:
result=int(i)+result
print(result)
15
방법 1. sum과 map을 이용해서 풀기
print(sum(map(int,input())))
54321
15
8958 번 OX퀴즈
https://www.acmicpc.net/problem/8958
for문을 이용하여 입력받을 ox의 개수를 입력받고 for문 중첩을 이용하여 ox의 길이를 파악하고 if문으로 ox 여부를 확인하였다. ox의 연속성에 따른 점수변화를 num_score로 두고 total_score을 num_score의 합으로 설정하였다.
num=int(input())
for i in range(num):
ox=input()
total_score=0
num_score=0
for i in range(len(ox)):
if (ox[i]=='O') is True:
num_score=num_score+1
else:
num_score=0
total_score=total_score+num_score
print(total_score)
5
OOXXOXXOOO
10
OOXXOOXXOO
9
OXOXOXOXOXOXOX
7
OOOOOOOOOO
55
OOOOXOOOOXOOOOX
30
1152번 단어의 개수
https://www.acmicpc.net/problem/1152
단어의 개수=공백의 위치마다 구분해줘서 입력받았다.
sentence=list(map(str,input().split()))
print(len(sentence))
The Curious Case of Benjamin Button
6
10809번 알파벳찾기
https://www.acmicpc.net/problem/10809
for문과 알파벳 list 선언
s=list(map(str,input()))
alpha=list('abcdefghijklmnopqrstuvwxyz')
array=[-1 for i in range(len(alpha))]
for i in range(len(s)):
if array[alpha.index(s[i])]==-1:
array[alpha.index(s[i])]=i
for j in array:
print(j,end=' ')
baekjoon
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
아스키코드 이용
알파벳의 아스키코드는 (97,123)이다.
s=input()
alpha=list(range(97,123))
for i in alpha:
print(s.find(chr(i)),end=' ')
baekjoon
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1157번 단어 공부
https://www.acmicpc.net/problem/1157
upper을 이용한 대문자 받기
count로 dictionary형태로 word 개수 세기
개수가 중복되는 단어들이 있으므로 max_list에서 따로 추출하기
조건에 맞게 최댓값이 하나면 알파벳을, 아니면 물음표를 출력하기
word=input().upper()
count={}
for i in word:
if i not in count:
count[i]=0
count[i]+=1
max_list=[j for j,k in count.items() if max(count.values())==k]
if len(max_list)==1:
print(max_list[0])
else:
print('?')
Mississipi
?
9012번 괄호
https://www.acmicpc.net/problem/9012
while문을 통해 ‘()’가 vps에 존재한다면 계속 replace를 통해 제거해주었다.
만약 VPS 문장이었다면 문자열에 아무것도 남지않고 VPS 문장이 아니라면 어떤 문자라도 남았을 것이다.
따라서 결과물의 길이로 YES와 NO를 구분지어줬다.
num=int(input())
for i in range(num):
vps=input()
while '()' in vps:
vps=vps.replace('()','')
if len(vps)==0:
print('YES')
else:
print('NO')
6
(())())
NO
(((()())()
NO
(()())((()))
YES
((()()(()))(((())))()
NO
()()()()(()()())()
YES
(()((())()(
NO
11718번 그대로 출력하기
https://www.acmicpc.net/problem/11718
while True로 반복문을 만들어주고 try~except문으로 오류가 발생했을때는 멈출수 있게 해준다.
while True:
try:
print(input())
except:
break
Online Judge
Online Judge