본문 바로가기

CS Study/algorithm

기타 문제풀이

1. 괄호 (백준 9012번)

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

직접 작성한 코드)

 

n=int(input())

for i in range(n):
    count1=0
    count2=0
    a=input()
    result='YES'
    for j in a:
        
        if j=='(':
            count1+=1
        else:
            count2+=1
            
        if (count2>count1):
            result='NO'
    if(count1!=count2):
        result='NO'
    print(result)

 

 

2. 제로 (백준 10773번)

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

 

직접 작성한 코드)

n=int(input())
array=[]

for i in range(n):
    a=int(input())
    if a==0:
        array.pop()
    else:
        array.append(a)

print(sum(array))

 

3. 요세푸스 (백준 1158번)

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

 

직접 작성한 코드)

n,k=map(int,input().split())
array=[]
result=[]
index=0
for i in range(n):
    array.append(i+1)

for i in range(n):
    index+=k-1
    index=index%len(array)
    result.append(array.pop(index))

print('<',end='')
for i in range(n):
    print(result[i],end='')
    if i==n-1:
        break
    print(', ', end='')
print('>',end='')

 

4. 터렛 (백준 1002번)

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

 

참고 코드)

import math 
n=int(input())
for i in range(n):
    array=list(map(int,input().split()))
    distance=math.sqrt((array[0]-array[3])**2+(array[1]-array[4])**2)

    if (array[2]==array[5] and distance==0):
        print(-1)
#내접 외접
    
    elif abs(array[2]-array[5])==distance or array[2]+array[5]==distance:
        print(1)

    elif abs(array[2]-array[5])<distance<array[2]+array[5]:
        print(2)
    else:
        print(0)

➡️ 원의 방정식을 이용해서 풀이한다.

 

5. 알파벳 찾기 (백준 10809번)

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

참고 코드)

n=input()
array = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

for i in array:
    val=n.find(i)
    print(val,end=' ')

➡️ find 함수: 인덱스 반환, 없으면 -1 반환

 

6. 소수 구하기 (백준 1929번) 

 

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

 

직접 작성한 코드 + 참고 코드)

 

a,b =map(int,input().split())

def isPrime(num):
    for i in range(2,int(num**0.5)+1):
        if num%i==0:
            return False
    return True

for i in range(a,b+1):
    if i==1:
        continue
    if isPrime(i):
        print(i)

 

➡️ 모든 범위를 검사하지 않고, 제곱근까지 검사하면된다. 
ex. 12의 약수는 1, 2, 3, 4, 6, 12 이다. 3까지 검사했을 때 약수가 있지 않으면  소수로 판단할 수 있다.
동일하게 25의 약수는 1, 5, 25 이다. 제곱근인 5까지 검사했을 때 소수가 아니라는것이 판단된다.

 7. 소수 찾기 (백준 1978번)

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

 

n=int(input())

array=[]
count=0
def number(num):
    if(num==1):
        return False
    for i in range(2,int(num**0.5)+1):
        if num%i ==0:
            return False
    return True

array=list(map(int,input().split()))
for i in array:
    
    if number(i)==True:
        count+=1

print(count)

 

➡️ 인덱스의 중요성을 알게된 문제이다.  int()는 소수부분을 제외한 정수를 return한다. 

'CS Study > algorithm' 카테고리의 다른 글

다이나믹 프로그래밍 문제 풀이  (0) 2022.07.31
이진 탐색 문제풀이  (0) 2022.07.30
DFS & BFS 문제 풀이  (0) 2022.07.19
정렬 알고리즘 (문제 풀이)  (0) 2022.07.14
그리디 알고리즘 (문제 풀이)  (0) 2022.07.12