[백준] 2693번 N번째 큰 수

[백준] 2693번 N번째 큰 수

출처: [백준] 2693번 N번째 큰 수


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 32 MB 3791 3044 2767 81.502%

문제

배열 A가 주어졌을 때, N번째 큰 값을 출력하는 프로그램을 작성하시오.

배열 A의 크기는 항상 10이고, 자연수만 가지고 있다. N은 항상 3이다.


입력

첫째 줄에 테스트 케이스의 개수 T(1 <= T <= 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 배열 A의 원소 10개가 공백으로 구분되어 주어진다. 이 원소는 1보다 크거나 같고, 1,000보다 작거나 같은 자연수이다.


출력

각 테스트 케이스에 대해 한 줄에 하나씩 배열 A에서 3번째 큰 값을 출력한다.


예제 입력 1

1
2
3
4
5
4
1 2 3 4 5 6 7 8 9 1000
338 304 619 95 343 496 489 116 98 127
931 240 986 894 826 640 965 833 136 138
940 955 364 188 133 254 501 122 768 408

예제 출력 1

1
2
3
4
8
489
931
768

출처


알고리즘 분류


소스코드

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

input = sys.stdin.readline

T = int(input())

for _ in range(T):
arr = list(map(int, input().split()))
arr.sort(reverse=True)
print(arr[2])

[백준] 10973번 이전 순열

[백준] 10973번 이전 순열

출처: [백준] 10973번 이전 순열


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 7635 4771 3960 64.780%

문제

1부터 N까지의 수로 이루어진 순열이 있다. 이때, 사전순으로 바로 이전에 오는 순열을 구하는 프로그램을 작성하시오.

사전 순으로 가장 앞서는 순열은 오름차순으로 이루어진 순열이고, 가장 마지막에 오는 순열은 내림차순으로 이루어진 순열이다.

N = 3인 경우에 사전순으로 순열을 나열하면 다음과 같다.

  • 1, 2, 3
  • 1, 3, 2
  • 2, 1, 3
  • 2, 3, 1
  • 3, 1, 2
  • 3, 2, 1

입력

첫째 줄에 N(1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄에 순열이 주어진다.


출력

첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.


예제 입력 1

1
2
4
1 2 3 4

예제 출력 1

1
-1

예제 입력 2

1
2
5
5 4 3 2 1

예제 출력 2

1
5 4 3 1 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys

input = sys.stdin.readline

N = int(input())
compare_list = list(map(int, input().split()))


i, j, k = [len(compare_list) - 1 for _ in range(3)] # 맨 뒤부터...
while i > 0 and compare_list[i - 1] <= compare_list[i]: # 맨 뒤부터 내림차순... 즉 오름차순일 경우
i -= 1

if not i: # 이전 순열이 없을 경우
print(-1)
exit(0)

while compare_list[i - 1] <= compare_list[j]:
j -= 1
compare_list[i - 1], compare_list[j] = compare_list[j], compare_list[i - 1]

while i < k:
compare_list[i], compare_list[k] = compare_list[k], compare_list[i]
i += 1
k -= 1

print(*compare_list)



------------메모리초과
import sys
from itertools import permutations

input = sys.stdin.readline

N = int(input())
compare_list = list(map(int, input().split()))
num_list = [i for i in range(1, N + 1)]

perm_list = list(permutations(num_list))
for i in range(len(perm_list)):
if list(perm_list[i]) == compare_list:
if i==0:
print(-1)
else:
for num in perm_list[i-1]:
print(num, end=" ")

[백준] 10972번 다음 순열

[백준] 10972번 다음 순열

출처: [백준] 10972번 다음 순열


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 17068 7204 5176 43.001%

문제

1부터 N까지의 수로 이루어진 순열이 있다. 이때, 사전순으로 다음에 오는 순열을 구하는 프로그램을 작성하시오.

사전 순으로 가장 앞서는 순열은 오름차순으로 이루어진 순열이고, 가장 마지막에 오는 순열은 내림차순으로 이루어진 순열이다.

N = 3인 경우에 사전순으로 순열을 나열하면 다음과 같다.

  • 1, 2, 3
  • 1, 3, 2
  • 2, 1, 3
  • 2, 3, 1
  • 3, 1, 2
  • 3, 2, 1

입력

첫째 줄에 N(1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄에 순열이 주어진다.


출력

첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.


예제 입력 1

1
2
4
1 2 3 4

예제 출력 1

1
1 2 4 3

예제 입력 2

1
2
5
5 4 3 2 1

예제 출력 2

1
-1

출처


알고리즘 분류


소스코드

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
import sys

input = sys.stdin.readline

N = int(input())
compare_list = list(map(int, input().split()))


i, j, k = [len(compare_list) - 1 for _ in range(3)] # 맨 뒤부터...
while i > 0 and compare_list[i - 1] >= compare_list[i]: # 맨 뒤부터 오름차순... 즉 내림차순일 경우
i -= 1

if not i: # 다음 순열이 없을 경우
print(-1)
exit(0)

while compare_list[i - 1] >= compare_list[j]:
j -= 1
compare_list[i - 1], compare_list[j] = compare_list[j], compare_list[i - 1]

while i < k:
compare_list[i], compare_list[k] = compare_list[k], compare_list[i]
i += 1
k -= 1

print(*compare_list)

2021년 6월 18일 금요일 IT뉴스

1. 핀테크에서 붙은 네이버 vs 카카오

핀테크에서 붙은 네이버 vs 카카오

네이버, 카카오의 금융사업 현황. 출처=한겨레신문 제작

네이버와 카카오는 빅테크 기업의 금융 진출이라는 점에서 같지만, 접근 방식에서는 확연한 차이가 나타나는데, 네이버는 기존 금융사들과 제휴하거나 혁신금융으로 지정받는 방식으로 서비스를 넓혀가지만, 카카오는 영업 허가를 받아 직접 뛰어들어 시장을 흔드는 전략을 쓴다.

카카오는 금융 자회사로 카카오페이(송금·결제 등)와 카카오뱅크(은행)를 뒀고, 카카오페이의 자회사로 카카오페이증권, 지난 9일 보험업 예비허가를 받은 카카오손해보험이 있으며, 카카오페이와 카카오뱅크는 자본 확충을 위해 기업공개(IPO)를 추진 중이다. 카카오는 플랫폼을 통해 기존의 금융서비스를 중개·제공하는 역할로는 금융혁신에 한계가 있다고 설명한다.

네이버의 금융 자회사인 네이버파이낸셜은 금융위원회의 규제 샌드박스(규제 유예)에 선정돼, 스마트스토어 사업자를 대상으로 한 신용대출을 하고 있으며, 네이버파이낸셜이 자사 데이터를 바탕으로 신용평가를 하면 미래에셋캐피탈이 대출을 내어주는 식으로 운영된다. 네이버는 검색엔진에서 출발했기 때문에 자사 플랫폼 안에 방대한 데이터를 수집하고 이를 분석하는 기술이 강하고 카카오처럼 여러 계열사를 두지 않는 것은 네이버파이낸셜을 통해 데이터를 한곳에 집적해 서비스를 고도화하려는 취지로 볼 수 있으며, 은행 등 사업에 직접 뛰어들지 않고 기존 금융사와 제휴하는 방식을 쓰는 것은 ‘금융기업’보다는 ‘금융플랫폼 기업’으로서 사업 역량을 강화하려는 전략적 판단이라고 네이버는 설명한다.


2. 구글 워크스페이스, 일반 사용자에게 개방… 새 협업 환경 ‘스페이스’도 도입

구글 워크스페이스, 일반 사용자에게 개방… 새 협업 환경 ‘스페이스’도 도입

스페이스 스냅샷. 구글 워크스페이스 룸이 스페이스로 바뀐다. ⓒ Google

지난 10월 구글은 구글 G 스위트(G Suite)의 이름을 워크스페이스로 변경하고, 앱을 가로지르는 협업 환경을 만들 것이라고 밝힌 바 있으며, 구글은 우선 유료 요금제에 해당하는 서비스부터 변경 작업을 시작했고, 이제 일반 사용자 대상의 작업이 시작된 것이다.

구글은 또한, 계약직 근로자를 위한 개인용 비즈니스 워크스페이스 계정을 발표했는데, 구글에 따르면 이 새로운 계정에는 지능형 예약 서비스, 전문적 영상회의, 개인화된 이메일 마케팅을 비롯한 여러 프리미엄 기능이 제공된다.

  • 구글 채팅과 지메일 안의 구글 채팅은 다르다. 지원 문서에는 이렇게 명시되어 있다. “채팅과 지메일 안의 채팅에서 같은 기능을 이용할 수 있지만, 지메일에 통합된 것은 친구, 가족, 동료와 이메일 사이사이에 커뮤니케이션할 수 있는 중앙화 된 공간을 제공한다.”

3. KT, 핀테크 1위 웹케시에 236억 지분 투자

뱅크샐러드 이은 두 번째 행보…B2C•B2B 금융 플랫폼 사업 기반 확보

KT, 핀테크 1위 웹케시에 236억 지분 투자

KT(대표 구현모)는 광화문 이스트 사옥에서 웹케시 그룹에 속한 웹케시, 비즈플레이, 로움아이티 등 3개사를 대상으로 총 236억의 전략적 지분투자와 함께 금융 사업 협력 계약을 체결했다고 17일 밝혔다.

웹케시 그룹은 기업 고객의 사업 규모에 따라 ▲비즈플레이(대‧중견기업) ▲경리나라(중소기업) ▲세모장부(소상공인) 등 B2B 핀테크 솔루션을 제공하고 있으며 KT의 인공지능(AI), 빅데이터, 클라우드 등 플랫폼 기술력과 유무선 인프라와 웹케시 그룹이 보유하고 있는 기업 핀테크 서비스를 연계해 기업 규모와 업종 등 타깃별 신규 플랫폼 서비스를 선보이고 솔루션을 고도화한다는 계획이다.


4. SK하이닉스, 리더 ‘책임 강화’·직원 ‘처우 개선’…체질 개선 고삐

SK하이닉스, 리더 ‘책임 강화’·직원 ‘처우 개선’…체질 개선 고삐 : 네이버 뉴스 (naver.com)

구성원의 처우는 개선하고 최고경영자(CEO)에는 사업 성과에 대한 책임을 강화하는 등 선제적인 내부 자정 노력을 통해 조직문화를 새로 정비하고, 더 나아가 인재 확보 경쟁력을 끌어올리겠다는 전략이다.

◆ SK하이닉스, ‘박정호·이석희’ 경영 능력도 평가한다

◆ 구성원은 ‘처우 개선’…8000만 원 받는 대졸 신입 나온다

최근 SK하이닉스 노사는 임금협상을 진행하고, 기술 사무직, 생산직 등 전체 직군의 기본급을 기존 대비 8.07% 인상하기로 합의했다. 대졸 초임 연봉은 기존 4000만 원대에서 5040만 원으로 인상하여 기본급, PS(초과이익분배금), PI(생산성 격려금) 등을 합산한 SK하이닉스 신입사원 연봉은 최대 8000만 원 수준으로 점쳐진다. SK하이닉스는 현재 연 1회의 PS, 연 2회의 PI를 지급하고 있다.


5. “구글, 무료라더니…” 클라우드 유료화에 열받은 대학들

“구글, 무료라더니…” 클라우드 유료화에 열받은 대학들 : 네이버 뉴스 (naver.com)

구글은 지난 2019년 초부터 국내 대학들을 대상으로 이메일 저장 서비스를 무료로 제공하기 시작했고, 당시 구글은 각 대학에 “무제한 메일함 용량과 구글 포토·구글 드라이브 등 클라우드(가상 서버)를 무료로 사용할 수 있게 하겠다”고 홍보하며 가입을 유도하여 서버 운영에 매년 수억~수십억 원을 써야 했던 많은 대학은 자체 운영 서버를 중단하고 구글 서비스를 도입하고 이전까지 다른 클라우드 서비스를 이용하던 대학 교수·학생들도 일제히 구글 서비스에 가입했고, 개인 이메일은 물론이고 연구·교육 데이터도 구글 서버에 올려 보관했다.

하지만 구글이 2년 만에 무료 저장 정책을 뒤집으면서 대학들엔 비상이 걸렸다. 구글은 이달 초 서울대를 비롯한 각 대학에 ‘그동안 무제한으로 제공하던 스토리지(저장) 서비스를 내년 7월부터 기본 제공 용량을 100테라바이트로 제한한다’고 공지했고, 대학이 기본 제공 용량 이상의 저장 공간을 사용하려면 앞으로 별도의 요금을 구글에 내야 한다.

그래픽=양인성

[백준] 1292번 쉽게 푸는 문제

[백준] 1292번 쉽게 푸는 문제

출처: [백준] 1292번 쉽게 푸는 문제


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 10628 5891 5197 57.559%

문제

동호는 내년에 초등학교를 입학한다. 그래서 동호 어머니는 수학 선행 학습을 위해 쉽게 푸는 문제를 동호에게 주었다.

이 문제는 다음과 같다. 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5 .. 이러한 수열을 만들고 어느 일정한 구간을 주면 그 구간의 합을 구하는 것이다.

하지만 동호는 현재 더 어려운 문제를 푸느라 바쁘기에 우리가 동호를 도와주자.


입력

첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.


출력

첫 줄에 구간에 속하는 숫자의 합을 출력한다.


예제 입력 1

1
3 7

예제 출력 1

1
15

출처


알고리즘 분류


소스코드

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

input = sys.stdin.readline

A, B = map(int, input().split())

cur_value = 1
position = 1
result = 0

for i in range(A, B + 1):
while position < i:
cur_value += 1
position += cur_value
result += cur_value

print(result)

[백준] 1748번 수 이어 쓰기 1

[백준] 1748번 수 이어 쓰기 1

출처: [백준] 1748번 수 이어 쓰기 1


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
0.15 초 128 MB 12262 5639 4743 51.209%

문제

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

1234567891011121314151617181920212223…

이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.


입력

첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.


출력

첫째 줄에 새로운 수의 자릿수를 출력한다.


예제 입력 1

1
5

예제 출력 1

1
5

예제 입력 2

1
15

예제 출력 2

1
21

예제 입력 3

1
120

예제 출력 3

1
252

출처


알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
N = input()
exp = 0
result = 0
while exp < len(N) - 1:
result += 9 * (10 ** exp) * (exp + 1)
exp += 1
result += (int(N) - (10 ** (len(N) - 1)) + 1) * len(N)
print(result)


---------------
# 시간초과
N = int(input())
new_num = ""
for i in range(1, N + 1):
new_num += str(i)

print(len(new_num))

[AWS] Start Amazon EC2

[AWS] Start Amazon EC2

Select Instance(Amazon Linux2 AMI) With t2.micro

Configure Security group - Add types [SSH(22), HTTP(80)]

Instance Spec

2021년 6월 16일 수요일 IT뉴스

1. 삼성전자, 5G보다 50배 빠른 6G THz 무선통신 시연 성공

삼성전자, 5G보다 50배 빠른 6G THz 무선통신 시연 성공 : 네이버 뉴스 (naver.com)

삼성리서치 아메리카(SRA) 실험실에서 삼성전자 연구원들이 140㎓ 통신 시스템을 시연하고 있다. [삼성전자 제공]

삼성전자는 미국 샌타바버라 캘리포니아 주립대UCSB)와 6세대 이동통신(6G) 테라헤르츠(THz) 대역에서 통신 시스템 시연에 성공했다고 16일 밝혔다.

6G가 상용화되면 통신 성능의 획기적인 개선으로 몰입형 확장현실(XR)이나 홀로그램과 같은 신규 서비스가 모바일 단말에서도 지원이 가능해지고 이동 통신 기술의 적용 영역이 위성 통신이나 도심 항공 모빌리티까지 확장될 것으로 예상된다.

  • THz 대역은 100기가헤르츠(GHz)~10THz 사이의 주파수 대역을 의미한다.
  • THz 대역은 데이터 전송 속도가 최고 20기가비피에스(Gbps)인 5세대 이동통신(5G) 대비 최대 50배 빠른 1테라비피에스(Tbps·1초에 1조 비트를 전송하는 속도)를 목표로 하는 6G 통신의 후보 주파수 대역으로 꼽히고 있다.

2. 윤곽 드러낸 ‘윈도11’··· 개발 취소한 윈도10X의 흔적이 엿보인다

윤곽 드러낸 ‘윈도11’··· 개발 취소한 윈도10X의 흔적이 엿보인다 : 네이버 뉴스 (naver.com)

15일(현지시각) 더 버지(The Verge) 등 외신은 중국의 웹사이트 ‘바이두’에 윈도11의 모습이 유출됐다고 보도했으며 유출된 내용은 사용자 인터페이스(UI)와 시작 메뉴 등 스크린샷이다.

한편 MS의 차세대 윈도가 윈도11이었다는 소식이 전해지며, MS가 앞서 윈도10을 출시하며 “윈도10은 윈도의 마지막 버전이 될 것”이라고 발표한 바 있기 때문에 윈도10 이용자들의 불만은 커지고 있다.


3. 삼성도, LG도 모두 美 간다…CES 2022, 코로나 딛고 오프라인 전시 참가 ‘후끈’

삼성도, LG도 모두 美 간다…CES 2022, 코로나 딛고 오프라인 전시 참가 ‘후끈’ : 네이버 뉴스 (naver.com)

16일 삼성전자와 LG전자에 따르면 내년 1월 5일부터 8일까지 미국 라스베이거스에서 열리는 CES의 오프라인 전시에 참가한다. 삼성전자는 내년 CES에서 QD디스플레이를 활용한 TV 신제품을 선보일 것으로 예상되고, LG전자는 초고화질 OLED TV를 소개한다는 계획이며 또 AI와 로봇기술, 자동차 전장 등도 전시할 것으로 보인다.


4. 테크핀의 공습…대출시장 빅뱅

테크핀의 공습…대출시장 빅뱅 | 한경닷컴 (hankyung.com)

15일 금융권에 따르면 네이버의 금융 자회사 네이버파이낸셜은 한국핀테크산업협회를 통해 정부의 대환대출 중개 플랫폼에 참여하고 싶다는 의사를 금융결제원과 금융당국에 전달했다.

애초 새 플랫폼에는 대출을 취급하는 금융사 외에 기존에 대출 비교 서비스를 영위하던 13개 핀테크업체 ( 토스, 카카오페이, 핀다, 페이코 등)만 참여할 예정이었지만, 금융위 관계자는 “네이버 같은 강력한 플랫폼이 참여하면 대환대출 서비스의 접근성이 더 좋아진다”며 “금융사와 빅테크 간 건전한 경쟁을 통해 금융소비자 혜택이 늘어날 것”으로 기대했다.

  • 정부의 대환대출 중개 플랫폼: 각 금융사의 대출 조건을 소비자가 비교해보고 자유롭게 다른 대출로 갈아탈 수 있는 개방된 플랫폼

5. 대출금리 비교, 실시간 해외 송금… 영토 넓히는 핀테크

대출금리 비교, 실시간 해외 송금… 영토 넓히는 핀테크 - 조선일보 (chosun.com)

  • P2P(온라인 대출 중개) 금융은 온라인 플랫폼을 통해 대출 희망자와 돈을 댈 수 있는 개인 투자자를 연결해주는 것이다.

대출 희망자는 5~15%의 중금리로 대출을 받을 수 있고, 투자자는 그에 준하는 수익률을 기대할 수 있지만, 다만 돈을 떼일 수 있다는 우려가 컸다. 지난 10일 ‘8퍼센트’ ‘렌딧’ ‘피플펀드컴퍼니’ 등 3사가 온라인 투자 연계 금융법상 최초 등록됐으며, 금융 당국의 관리, 감독을 받으며 투자자 보호 조치가 시행돼 상대적으로 안심하고 이용할 수 있다.

[백준] 11723번 집합

[백준] 11723번 집합

출처: [백준] 11723번 집합


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1.5 초 4 MB (하단 참고) 32627 10094 7070 30.218%

문제

비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.

  • add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
  • remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
  • check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
  • toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
  • all: S를 {1, 2, …, 20} 으로 바꾼다.
  • empty: S를 공집합으로 바꾼다.

입력

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.

둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.


출력

check 연산이 주어질때마다, 결과를 출력한다.


예제 입력 1

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
26
add 1
add 2
check 1
check 2
check 3
remove 2
check 1
check 2
toggle 3
check 1
check 2
check 3
check 4
all
check 10
check 20
toggle 10
remove 20
check 10
check 20
empty
check 1
toggle 1
check 1
toggle 1
check 1

예제 출력 1

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

출처


알고리즘 분류


소스코드

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
import sys

input = sys.stdin.readline

M = int(input())
S = set()

for _ in range(M):
comm = input().strip().split()

if comm[0] == 'add':
S.add(int(comm[1]))
elif comm[0] == 'remove':
S.discard(int(comm[1]))
elif comm[0] == 'check':
if int(comm[1]) in S:
print(1)
else:
print(0)
elif comm[0] == 'toggle':
if int(comm[1]) in S:
S.discard(int(comm[1]))
else:
S.add(int(comm[1]))
elif comm[0] == 'all':
S = set([i for i in range(1, 21)])
elif comm[0] == 'empty':
S = set()

[백준] 2504번 괄호의 값

[백준] 2504번 괄호의 값

출처: [백준] 2504번 괄호의 값


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 29463 7308 5555 27.818%

문제

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다.

  1. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다.
  2. 만일 X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다.
  3. X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다.

예를 들어 ‘(()[[]])’나 ‘(())[][]’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()()[]’ 은 모두 올바른 괄호열이 아니다. 우리는 어떤 올바른 괄호열 X에 대하여 그 괄호열의 값(괄호값)을 아래와 같이 정의하고 값(X)로 표시한다.

  1. ‘()’ 인 괄호열의 값은 2이다.
  2. ‘[]’ 인 괄호열의 값은 3이다.
  3. ‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다.
  4. ‘[X]’ 의 괄호값은 3×값(X) 으로 계산된다.
  5. 올바른 괄호열 X와 Y가 결합된 XY의 괄호값은 값(XY)= 값(X)+값(Y) 로 계산된다.

예를 들어 ‘(()[[]])([])’ 의 괄호값을 구해보자. ‘()[[]]’ 의 괄호값이 2 + 3×3=11 이므로 ‘(()[[ ]])’의 괄호값은 2×11=22 이다. 그리고 ‘([])’의 값은 2×3=6 이므로 전체 괄호열의 값은 22 + 6 = 28 이다.

여러분이 풀어야 할 문제는 주어진 괄호열을 읽고 그 괄호값을 앞에서 정의한대로 계산하여 출력하는 것이다.


입력

첫째 줄에 괄호열을 나타내는 문자열(스트링)이 주어진다. 단 그 길이는 1 이상, 30 이하이다.


출력

첫째 줄에 그 괄호열의 값을 나타내는 정수를 출력한다. 만일 입력이 올바르지 못한 괄호열이면 반드시 0을 출력해야 한다.


예제 입력 1

1
(()[[]])([])

예제 출력 1

1
28

출처


알고리즘 분류


소스코드

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
48
49
50
51
import sys

input = sys.stdin.readline

input_string = list(input().rstrip())

stack = []


def solution(string):
for bracket in string:

if bracket == ')':
tmp = 0
while stack:
top = stack.pop()
if top == '(':
if tmp == 0:
stack.append(2)
else:
stack.append(tmp * 2)
break
elif top == '[':
return 0
else:
tmp += int(top)

elif bracket == ']':
tmp = 0
while stack:
top = stack.pop()
if top == '[':
if tmp == 0:
stack.append(3)
else:
stack.append(tmp * 3)
break
elif top == '(':
return 0
else:
tmp += int(top)
else:
stack.append(bracket)
return stack


if solution(input_string):
print(0 if '(' in stack or '[' in stack else sum(stack))
else:
print(0)