[백준] 1032번 명령 프롬프트

[백준] 1032번 명령 프롬프트

출처: [백준] 1032번 명령 프롬프트


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 17770 8716 7470 50.740%

문제

시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.

dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. “dir 패턴”과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.

이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 “.” 그리고 “?”만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.


입력

첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳과 “.” 그리고 “?”로만 이루어져 있다.


출력

첫째 줄에 패턴을 출력하면 된다.


예제 입력 1

1
2
3
4
3
config.sys
config.inf
configures

예제 출력 1

1
config????

출처


알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys

input = sys.stdin.readline

N = int(input())
file_list = [list(input().rstrip()) for _ in range(N)]

input_word = file_list[-1]

for i in range(N - 1):
for j in range(len(input_word)):
if input_word[j] == file_list[i][j]:
continue
else:
input_word[j] = '?'

print(''.join(input_word))
[백준] 1100번 하얀 칸

[백준] 1100번 하얀 칸

출처: [백준] 1100번 하얀 칸


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 14533 9611 8429 68.724%

문제

체스판은 8*8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.


입력

첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다. ‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.


출력

첫째 줄에 문제의 정답을 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.

예제 출력 1

1
1

출처


알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys

input = sys.stdin.readline
input_board = [list(input().rstrip()) for _ in range(8)]

count = 0
for i in range(8):
for j in range(8):
if (i + j) % 2 == 0:
if input_board[i][j] == 'F':
count += 1

print(count)

[백준] 2743번 단어 길이 재기

[백준] 2743번 단어 길이 재기

출처: [백준] 2743번 단어 길이 재기


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 14281 11663 10225 83.171%

문제

알파벳으로만 이루어진 단어를 입력받아, 그 길이를 출력하는 프로그램을 작성하시오.


입력

첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다.


출력

첫째 줄에 입력으로 주어진 단어의 길이를 출력한다.


예제 입력 1

1
pulljima

예제 출력 1

1
8

출처

  • 데이터를 추가한 사람: 79brue
  • 문제를 만든 사람: baekjoon

알고리즘 분류


소스코드

1
2
3
4
string = input()

print(len(string))

[백준] 9375번 패션왕 신해빈

[백준] 9375번 패션왕 신해빈

출처: [백준] 9375번 패션왕 신해빈


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 8972 4744 4148 54.350%

문제

해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까?


입력

첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다.

  • 각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수 n(0 ≤ n ≤ 30)이 주어진다.
  • 다음 n개에는 해빈이가 가진 의상의 이름과 의상의 종류가 공백으로 구분되어 주어진다. 같은 종류의 의상은 하나만 입을 수 있다.

모든 문자열은 1이상 20이하의 알파벳 소문자로 이루어져있으며 같은 이름을 가진 의상은 존재하지 않는다.


출력

각 테스트 케이스에 대해 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력하시오.


예제 입력 1

1
2
3
4
5
6
7
8
9
2
3
hat headgear
sunglasses eyewear
turban headgear
3
mask face
sunglasses face
makeup face

예제 출력 1

1
2
5
3

힌트

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.


출처


알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys

input = sys.stdin.readline

T = int(input())

for _ in range(T):
clothes = {}
N = int(input())
for _ in range(N):
name, kind = input().split()
if kind in clothes:
clothes[kind] += 1
else:
clothes[kind] = 1

case = 1
for key in clothes.keys():
case = case * (clothes[key] + 1)
print(case - 1)

[백준] 10808번 알파벳 개수

[백준] 10808번 알파벳 개수

출처: [백준] 10808번 알파벳 개수


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 18151 12517 10446 69.850%

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.


입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.


출력

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.


예제 입력 1

1
baekjoon

예제 출력 1

1
1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0

출처

  • 문제를 만든 사람: baekjoon
  • 잘못된 데이터를 찾은 사람: djm03178
  • 문제의 오타를 찾은 사람: eric00513

알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys

input = sys.stdin.readline

string = list(input().rstrip())

alpha_count = {}
for i in range(ord('z') - ord('a') + 1):
alpha_count[chr(ord('a') + i)] = 0

for alphabet in string:
alpha_count[alphabet] += 1

print(*list(alpha_count.values()))

[백준] 4949번 균형잡힌 세상

[백준] 4949번 균형잡힌 세상

출처: [백준] 4949번 균형잡힌 세상


문제

세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다.

정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다.

문자열에 포함되는 괄호는 소괄호(“()”) 와 대괄호(“[]”)로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.

  • 모든 왼쪽 소괄호(“(“)는 오른쪽 소괄호(“)”)와만 짝을 이뤄야 한다.
  • 모든 왼쪽 대괄호(“[“)는 오른쪽 대괄호(“]”)와만 짝을 이뤄야 한다.
  • 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다.
  • 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.
  • 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.

정민이를 도와 문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단해보자.


입력

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호(“( )”) 대괄호(“[ ]”)등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다.

입력의 종료조건으로 맨 마지막에 점 하나(“.”)가 들어온다.


출력

각 줄마다 해당 문자열이 균형을 이루고 있으면 “yes”를, 아니면 “no”를 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
So when I die (the [first] I will see in (heaven) is a score list).
[ first in ] ( first out ).
Half Moon tonight (At least it is better than no Moon at all].
A rope may form )( a trail in a maze.
Help( I[m being held prisoner in a fortune cookie factory)].
([ (([( [ ] ) ( ) (( ))] )) ]).
.
.

예제 출력 1

1
2
3
4
5
6
7
yes
yes
no
no
no
yes
yes

힌트

7번째의 “ .”와 같이 괄호가 하나도 없는 경우도 균형잡힌 문자열로 간주할 수 있다.


출처

ICPC > Regionals > Asia Pacific > Japan > Japan Domestic Contest > 2011 Japan Domestic Contest B번

  • 문제의 오타를 찾은 사람: chminoo
  • 잘못된 번역을 찾은 사람: jh05013
  • 문제를 번역한 사람: occidere

알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import sys

input = sys.stdin.readline

while True:
string = input().rstrip()
if string == '.':
break
stack = []
flag = 1

for char in string:
if char == '(' or char == '[':
stack.append(char)
elif char == ')':
if not stack or stack[-1] == '[':
flag = 0
break
elif stack[-1] == '(':
stack.pop()
elif char == ']':
if not stack or stack[-1] == '(':
flag = 0
break
elif stack[-1] == '[':
stack.pop()

if flag == 1 and not stack:
print('yes')
else:
print('no')

[백준] 9012번 괄호

[백준] 9012번 괄호

출처: [백준] 9012번 괄호


문제

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.

여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.


입력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.


출력

출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.


예제 입력 1

1
2
3
4
5
6
7
6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(

예제 출력 1

1
2
3
4
5
6
NO
NO
YES
NO
YES
NO

예제 입력 2

1
2
3
4
3
((
))
())(()

예제 출력 2

1
2
3
NO
NO
NO

힌트


출처


알고리즘 분류


시간 제한


풀이


소스코드 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys

input = sys.stdin.readline

T = int(input())

for _ in range(T):
string = list(input().rstrip())
while len(string) != 0:
if string[0] == ')':
print("NO")
break
else:
if ')' in string:
string.remove(')')
string.remove('(')
else:
print("NO")
break

if len(string) == 0:
print("YES")

소스코드 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys

input = sys.stdin.readline

T = int(input())

for _ in range(T):
string = list(input().rstrip())

vps_sum = 0
for x in string:
if x == '(':
vps_sum += 1
elif x == ')':
vps_sum -= 1
if vps_sum < 0:
print("NO")
break

if vps_sum == 0:
print('YES')
elif vps_sum > 0:
print('NO')

[백준] 10773번 제로

[백준] 10773번 제로

출처: [백준] 10773번 제로


문제

나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.

재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.

재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.

재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!


입력

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)

이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 “0” 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다.

정수가 “0”일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.출력

출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.


출력

재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 231-1보다 작거나 같은 정수이다.


예제 입력 1

1
2
3
4
5
4
3
0
4
0

예제 출력 1

1
0

예제 입력 2

1
2
3
4
5
6
7
8
9
10
11
10
1
3
5
4
0
0
7
0
0
6

예제 출력 2

1
7

힌트

  • 예제 2의 경우를 시뮬레이션 해보면,

    • [1]
    • [1,3]
    • [1,3,5]
    • [1,3,5,4]
    • [1,3,5] (0을 불렀기 때문에 최근의 수를 지운다)
    • [1,3] (0을 불렀기 때문에 그 다음 최근의 수를 지운다)
    • [1,3,7]
    • [1,3] (0을 불렀기 때문에 최근의 수를 지운다)
    • [1] (0을 불렀기 때문에 그 다음 최근의 수를 지운다)
    • [1,6]

    합은 7이다.


출처


알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys

input = sys.stdin.readline

K = int(input())

stack_list = []
for _ in range(K):
comm = int(input())
if comm == 0:
stack_list.pop()
else:
stack_list.append(comm)

print(sum(stack_list))
[백준] 5430번 AC

[백준] 5430번 AC

출처: [백준] 5430번 AC


문제

선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.

함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.

함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, “AB”는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, “RDD”는 배열을 뒤집은 다음 처음 두 숫자를 버리는 함수이다.

배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오.


입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.

각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. p의 길이는 1보다 크거나 같고, 100,000보다 작거나 같다.

다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. (0 ≤ n ≤ 100,000)

다음 줄에는 [x1,…,xn]과 같은 형태로 배열에 들어있는 수가 주어진다. (1 ≤ xi ≤ 100)

전체 테스트 케이스에 주어지는 p의 길이의 합과 n의 합은 70만을 넘지 않는다.


출력

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
9
10
11
12
13
4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]

예제 출력 1

1
2
3
4
[2,1]
error
[1,2,3,5,8]
error

힌트


출처


알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import sys
from collections import deque

T = int(input())

for _ in range(T):
comm = input()
N = int(sys.stdin.readline())

temp = input()[1:-1]
if ',' not in temp and temp != "":
num_list = deque([int(temp)])
elif temp != "":
num_list = deque(map(int, temp.split(',')))
else:
num_list = deque()

flag = True
cnt = 0 # Reverse의 개수

for i in range(len(comm)):
if comm[i] == "R":
cnt += 1
else:
if len(num_list) == 0:
flag = 0
break

if cnt % 2 == 0:
num_list.popleft()
else:
num_list.pop()

if cnt % 2 == 1:
num_list.reverse()

if flag:
print("[", end="")
for i in range(len(num_list)):
if i == len(num_list) - 1:
print(num_list[i], end="")
else:
print(str(num_list[i]) + ",", end="")
print("]")
else:
print('error')

[백준] 9251번 LCS

[백준] 9251번 LCS

출처: [백준] 9251번 LCS


문제

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.

예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.


입력

첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.


출력

첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.


예제 입력 1

1
2
ACAYKP
CAPCAK

예제 출력 1

1
4

힌트


출처


알고리즘 분류


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys

input = sys.stdin.readline

str1 = ' ' + input().rstrip()
str2 = ' ' + input().rstrip()

dp = [[0] * len(str2) for _ in range(len(str1))]

for i in range(1, len(str1)):
for j in range(1, len(str2)):
if str1[i] == str2[j]:
dp[i][j] = dp[i - 1][j - 1] + 1
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])

print(dp[-1][-1])