ans=[]
while True:
    arr=input()
    st=[]
    cnt=0
    if '-' in arr:
        break
    for i in arr:
        if i=='{':
            st.append('{')
        else:
            if st:
                st.pop()
            else:
                cnt+=1
                st.append('{')
    cnt+=len(st)//2
    ans.append(cnt)
for i in range(len(ans)):
    print(i+1, '. ', ans[i], sep='')

<코드 설명>

while문을 이용해 무한반복해주며, arr를 input받는다.

입력의 마지막 줄은 '-'가 한 개 이상 주어지기 때문에 '-'가 arr에 포함되면 break해준다.

 

arr의 현재 문자가 '{'일 때, st(스택)에 이를 append해준다.

arr의 현재 문자가 '}'일 때, st가 비어있지 않을 때 pop을 해준다. st가 비어있을 때는 안정적이지 않은 상태이므로 cnt값을 1 증가시켰고, 안정적이지 않은 상태를 바꿔주기 위해 '{'를 st에 append해준다.

 

st의 길이/2를 cnt에 더해주고, 이렇게 구한 cnt값을 ans배열에 추가시켜주었다.

 

ans배열의 원소를 모두 출력시켜주었다.

 

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1543 문서 검색  (0) 2022.11.13
[BOJ] 3077 임진왜란  (0) 2022.11.13
[BOJ] 14425 문자열 집합  (0) 2022.11.06
[BOJ] 16499 동일한 단어 그룹화하기  (0) 2022.11.06
[BOJ] 13417 카드 문자열  (0) 2022.11.06

n, m=map(int, input().split())
d=dict()
ans=0
for i in range(n):
    str1=input()
    d[str1]=1
for i in range(m):
    str2=input()
    if str2 in d:
        ans += 1
print(ans)

<코드 설명>

문자열 개수인 n과 m을 입력받아주었다.

n만큼 str1을 input받아 dict에 str1을 각각 1의 값을 저장해주었다.

m만큼 str2를 input받았다.

이전 dict에 저장해주었던 값에 str2가 포함되어 있다면 ans를 1 증가해주었다.

이렇게 구한 ans값을 출력해주었다.

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 3077 임진왜란  (0) 2022.11.13
[BOJ] 4889 안정적인 문자열  (0) 2022.11.13
[BOJ] 16499 동일한 단어 그룹화하기  (0) 2022.11.06
[BOJ] 13417 카드 문자열  (0) 2022.11.06
[BOJ] 1065 한수  (0) 2022.10.09

tc=int(input())
arr=[]
for i in range(tc):
    str=list(input())
    str=sorted(str)
    if str not in arr:
        arr.append(str)
print(len(arr))

<코드 설명>

먼저 testcase인 tc를 입력받아주었다.

tc만큼 for문을 통해 반복하여 단어(str)을 입력받았다.

그리고 이를 sorted 적용을 통해 정렬해주었다.

arr가 str에 포함되어 있지 않다면, arr에 str을 추가해주었다.

그리고 최종적으로 arr에 저장되어 있는 개수를 출력하여 그룹의 최소 개수를 출력해주었다.

 

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 4889 안정적인 문자열  (0) 2022.11.13
[BOJ] 14425 문자열 집합  (0) 2022.11.06
[BOJ] 13417 카드 문자열  (0) 2022.11.06
[BOJ] 1065 한수  (0) 2022.10.09
[BOJ] 2776 암기왕  (0) 2022.10.09

 

tc=int(input())
for i in range(tc):
    n=int(input())
    str=list(input().split())
    arr=[str[0]]

    for j in range(1, len(str)):
        left = arr[0]
        if str[j] <= left:
            arr.insert(0,str[j])
        else:
            arr.append(str[j])
    for j in arr:
        print(j, end='')
    print()

<코드 설명>

먼저 testcase를 입력받는다. 그리고 그만큼 for문을 반복시켜 각 카드의 개수와 카드에 적힌 알파벳을 입력받는다.

입력받아온 알파벳은 split하여 str에 list의 형태로 적용해주었다.

arr 배열을 만들어 str의 첫번째 값을 저장해주었다.

arr의 첫번째 원소가 str[j]원소보다 크거나 같을 때, arr배열의 첫번째 원소로 str[j] 원소를 삽입해준다.

그렇지 않다면, arr배열 맨 뒤에 str[j]원소를 삽입해준다.

이를 str list의 길이만큼 반복시켜주었다.

이렇게 구한 arr배열의 원소를 출력시켜주었다.

 

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 14425 문자열 집합  (0) 2022.11.06
[BOJ] 16499 동일한 단어 그룹화하기  (0) 2022.11.06
[BOJ] 1065 한수  (0) 2022.10.09
[BOJ] 2776 암기왕  (0) 2022.10.09
[BOJ] 9322 철벽 보안 알고리즘  (0) 2022.10.09

+ Recent posts