본문 바로가기

CS Study/algorithm

DFS & BFS 문제 풀이

1. DFS와 BFS (백준 1260번)

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

2. 스택 (백준 10828번)

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

직접 작성한 코드)

n=int(input())
stack=[]
for i in range(n):
    a=input()
    if a.split()[0]=='push':
        stack.append(a.split()[1])
        
        
    elif a=='top':
        if not stack:
            print(-1)
        else:
            print(stack[-1])
    elif a=='size':
        print(len(stack))
    elif a=='pop':
        if not stack:
            print(-1)
        else:
            print(stack[-1])
            stack.pop()
           
    elif a=='empty':
        if not stack:
            print(1)
        else:
            print(0)

 

3. 큐 (백준 10845 번)

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

직접 작성한 코드)

 

 

from collections import deque


n=int(input())
queue=deque()
for i in range(n):
    a=input()
    if a.split()[0]=='push':
        queue.append(a.split()[1])
        
    elif a=='size':
        print(len(queue))
        
    elif a=='pop':
        if not queue:
            print(-1)
        else:
            queue.popleft()
           
    elif a=='empty':
        if not queue:
            print(1)
        else:
            print(0)
            
    elif a=='front':
        if not queue:
            print(-1)
        else:
            print(queue[0])
            
    elif a=='back':
        if not queue:
            print(-1)
        else:
            print(queue[-1])

 

 

4. 피보나치 수 5 (백준 10870번)

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

 

직접 작성한 코드)

 

n=int(input())
array=[]
array.append(0)
array.append(1)
for i in range(n+1):
    if i==0 or i==1 :
        continue
    array.append(array[i-1]+array[i-2])

print(array[n])

 

5. 균형잡힌 세상 (백준 4949번)

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

 

직접 작성한 코드)

 

from collections import deque
import math

while True:
    array=[]
    a=list(input())
    dq=deque()
  
    
    result='yes'
    if a[0]=='.' and len(a)==1:
        break
    for i in a:
        
        if i=='[' or i== '(':
            dq.append(i)
            
        elif i==']':
            if len(dq)==0:
                result='no'
                break
            st=dq.pop()
            
            if st!='[':
                result='no'
                break
            
        elif i==')':
            if len(dq)==0:
                result='no'
                break
            st=dq.pop()
            if st!='(':
                result='no'
                break
            
        
   
    if (len(dq)!=0):
        result='no'
    print(result)

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

이진 탐색 문제풀이  (0) 2022.07.30
기타 문제풀이  (0) 2022.07.22
정렬 알고리즘 (문제 풀이)  (0) 2022.07.14
그리디 알고리즘 (문제 풀이)  (0) 2022.07.12
최단 경로 알고리즘  (0) 2022.07.12