Hits

안녕하세요. 모카의 머신러닝 입니다. 이번 포스팅에서는 백준 알고리즘 문제 풀이에 대해 포스팅하도록 하겠습니다.


코드는 이곳을 참고했음을 밝힙니다.


1. 투포인터

백준 2018번

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

n = int(input())
count = 1
start_index = 1
end_index = 1
sum = 1

while end_index != n:
    if sum == n:
        count += 1
        end_index += 1
        sum += end_index
    elif sum > n:
        sum -= start_index
        start_index += 1
    else:
        end_index += 1
        sum += end_index
        
print(count)


백준 1940번

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

import sys
input = sys.stdin.readline
N = int(input())
M = int(input())
A = list(map(int, input().split()))
A.sort()
count = 0
i = 0
j = N-1

while i<j:
    if A[i] + A[j] < M:
        i += 1
    elif A[i] + A[j] > M:
        j -= 1
    else:
        count += 1
        i += 1
        j -= 1
        
print(count)


백준 1253번

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

import sys
input = sys.stdin.readline
N = int(input())
Result = 0
A = list(map(int, input().split()))
A.sort()

for k in range(N):
    find = A[k]
    i = 0
    j = N-1
    while i < j:
        if A[i] + A[j] == find:
            if i != k and j != k:
                Result += 1
                break
            elif i == k:
                i += 1
            elif j == k:
                j -= 1
        elif A[i] + A[j] < find:
            i += 1
        else:
            j -= 1
            
print(Result)


2. 슬라이딩 윈도우

백준 12891번

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

import sys
input = sys.stdin.readline


checkList = [0]*4
myList [0]*4
checkSecret = 0

def myadd(c):
    global checkList, myList, checkSecret
    if c == 'A':
        myList[0] += 1
        if myList[0] == checkList[0]:
            checkList += 1
    elif c == 'C':
        myList[1] += 1
        if myList[1] == checkList[1]:
            checkList += 1
    elif c == 'G':
        myList[2] += 1
        if myList[2] == checkList[2]:
            checkList += 1
    elif c == 'T':
        myList[3] += 1
        if myList[3] == checkList[3]:
            checkList += 1

def myremove(c):
    global checkList, myList, checkSecret
    if c == 'A':
        if myList[0]== checkList[0]:
            checkSecret -= 1
        myList[0] -= 1
    elif c == 'C':
        if myList[1]== checkList[1]:
            checkSecret -= 1
        myList[1] -= 1
    elif c == 'G':
        if myList[2]== checkList[2]:
            checkSecret -= 1
        myList[2] -= 1
    elif c == 'T':
        if myList[3]== checkList[3]:
            checkSecret -= 1
        myList[3] -= 1

S, P = map(int, input().split())
Result = 0
A = list(input())
checkList = list(map(int, input().split()))

for i in range(4):
    if checkList[i] == 0:
        checkSecret += 1
        
for i in range(P):
    myadd(A[i])
    
if checkSecret == 4:
    Result += 1
    
for i in range(P, S):
    j = i - P
    myadd(A[i])
    myremove(A[j])
    if checkSecret == 4:
        Result += 1
        
print(Result)
            


백준 11003번

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

from collections import deque
N, L = map(int, input().split())
mydeque = deque()
now = list(map(int, input().split()))

for i in range(N):
    while mydeque and mydeque[-1][0] > now[i]:
        mydeque.pop()
    mydeque.append((now[i], i))
    if mydeque[0][1] <= i - L:
        mydeque.popleft()
    print(mydeque[0][0], end=' ')


지금까지 백준 알고리즘 투포인터, 슬라이딩 윈도우 부분이었습니다.

읽어주셔서 감사합니다. 😃