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 |