위 링크에서 구현 알고리즘 문제를 풀고 풀이를 기록하는 게시글입니다.
6. 구현
- 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.
- 알고리즘 문제에서 거의 모든 문제가 '구현 문제'인데 가끔 구현이 어렵거나 구현에 초점이 맞추어진 문제들이 있다.
- 즉, 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제라고 알고 있으면 된다.
구현알고리즘 숙지사항
- 구현 문제 유형은 모든 범위의 코딩 테스트 문제 유형을 포함하는 개념
- 프로그래밍 언어의 문법을 정확히 알고 있어야 함
- 라이브러리 사용 경험을 늘려야 함
- 파이썬의 경우 자료형의 표현 범위 제한에 대해 깊게 생각하지 않아도 되지만 실수형 변수는 유효숫자에 따라서 연산 결과가 원하는 값이 나오지 않을 수 있음
- 크기가 1,000만 이상인 리스트가 있다면 메모리 용량 제한으로 문제를 풀 수 없게 되는 경우도 있음
- 일반적인 기업 코딩 테스트 환경에서는 파이썬으로 제출한 코드가 1초에 2,000만 번의 연산을 수행한다고 가정하면 크게 무리가 없음
- 알고리즘 문제를 풀 때는 시간제한과 데이터의 개수를 먼저 확인한 뒤에 이 문제를 어느 정도의 시간 복잡도의 알고리즘으로 작성해야 풀 수 있을 것인지 예측할 수 있어야 함
- 코딩 테스트 환경이 만약 Pypy3을 지원한다면 이를 이용하자
문제
(❌ 표시는 혼자 못푼 문제)
2023. 12. 09. 5일차 (1)
1. 2979번 트럭 주차 (브론즈2) 문제링크
문제 해석
트럭 주차비용을 계산한다.
주차 트럭 수에 따라서 주차 요금을 할인해준다.
트럭 한대 주차하면 1분에 한 대당 A원,
두대 주차하면 1분에 한 대당 B원,
세대 주차하면 1분에 한 대당 C원
A, B, C가 주어지고, 상근이의 트럭이 주차장에 주차된 시간이 주어졌을 때, 주차 요금으로 얼마를 내야 하는지 구하는 프로그램을 작성하시오.
제한: 1초 128MB
입력
첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100)
다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장에서 떠난 시간이다. 도착한 시간은 항상 떠난 시간보다 앞선다. 입력으로 주어지는 시간은 1과 100사이 이다.
출력
첫째 줄에 상근이가 내야하는 주차 요금을 출력한다.
코드
40ms
A, B, C = map(int, input().split())
dp = [0] * 101
for _ in range(3):
start, end = map(int, input().split())
for i in range(start, end):
dp[i] += 1
res = 0
for i in dp:
if i == 1:
res += A
elif i == 2:
res += (B * 2)
elif i == 3:
res += (C * 3)
print(res)
2023. 12. 09. 5일차 (2)
2. 1157번 단어 공부 (브론즈1) 문제링크
문제 해석
제한: 2초 512MB
입력
첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.
출력
거스름돈 동전의 최소 개수를 출력한다. 만약 거슬러 줄 수 없으면 -1을 출력한다.사전 순으로 가장 앞서는 답을 출력. 만약 덮을 수 없으면 -1을 출력
코드
strInput = input().upper()
maxChr = ''
maxCnt = 0
for i in range(65,91):
cnt = strInput.count(chr(i))
if maxCnt < cnt:
maxCnt = cnt
maxChr = chr(i)
elif maxCnt == cnt:
maxChr = "?"
print(maxChr)
이 문제의 포인트
- 반복문을 한번만 사용해서 바로 답을 찾는 방법을 생각해보자
- 알파벳 65~90까지가 대분자 A~Z 까지다. (소문자는 97, 122)
- 숫자를 넣으면 아스키 코드를 반환해주는 함수: ch(i)
(아스키코드를 넣으면 숫자를 반환해주는 함수는ord('z')
)
2023. 12. 09. 5일차 (3)
3. 11723번 집합 (실버5) 문제링크
문제 해석
비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.
-add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
-remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
-check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
-toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
-all: S를 {1, 2, ..., 20} 으로 바꾼다.
-empty: S를 공집합으로 바꾼다.
제한: 1.5초 4MB
입력
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.
둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
출력
check 연산이 주어질때마다, 결과를 출력한다.
코드
비트 연산자를 사용해 풀어야 한다.
python 4004ms, pypy로 하면 1332ms
import sys
def _input():
return sys.stdin.readline().strip()
M = int(_input())
S = 0
for _ in range(M):
inputStr = _input()
x = 0
if "all" in inputStr or "empty" in inputStr:
command = inputStr
else:
command, n = inputStr.split()
x = int(n)
if command == "add":
S = S | 1 << x
elif command == "remove":
S = S & ~(1 << x)
elif command == "check":
if S & 1 << x > 0:
print(1)
else:
print(0)
elif command == "toggle":
S = S ^ 1 << x
elif command == "all":
S = (1 << 21) - 1
elif command == "empty":
S = 0
이 문제의 포인트
* XOR: ^ - OR과 반대로 동작한다. toggle
* 모든 비트를 1로 만들기 위해서는 1 << 21 에서 -1 을 빼준다.
* 입력이 많기 때문에 sys.readline()을 사용해줘야한다. 안그럼 시간 초과가 날것이다.
2023. 12. 09. 5일차 (4)
4. 10431번 줄세우기 (실버5) 문제링크
문제 해석
반에 있는 20명의 아이들에게 키 순서대로 번호를 부여하려고 한다. 작은 아이가 1번이다.
반 아이들은 항상 20명이고. 같은 키는 없다.
번호 부여를 위해 키 순서대로 아이들을 세우려고한다.
아무나 한명을 뽑아 맨 앞에 세우고. 그 다음부터는 맨 뒤에 세우면서 다음 과정을 거친다.
- 자기보다 큰 학생이 앞에 없으면 그 자리에 서고 차례가 끝난다.
- 앞에 큰 애가 있으면 그 중 가장 앞에 있는 애(A) 앞에 선다. 이때 A 부터 그 뒤의 모든 학생들은 한발씩 물러난다.
위의 방법을 마지막 학생까지 시행하여 줄서기가 끝났을 때 학생들이 총 몇 번 뒤로 물러서게 될까?
제한: 1초 256MB
입력
첫 줄에 테스트 케이스의 수 P (1 ≤ P ≤ 1000) 가 주어진다.
각 테스트 케이스는 테스트 케이스 번호 T와 20개의 양의 정수가 공백으로 구분되어 주어진다.
20개의 정수는 줄서기를 할 아이들의 키를 줄서기 차례의 순서대로 밀리미터 단위로 나타낸 것이다.
모든 테스트 케이스는 독립적이다.
출력
각각의 테스트 케이스에 대해 테스트 케이스의 번호와 학생들이 뒤로 물러난 걸음 수의 총합을 공백으로 구분하여 출력한다.
코드
P = int(input())
for i in range(P):
arr = list(map(int, input().split()))
line = [arr[1]]
step = 0
for j in range(2, 21):
newStudent = arr[j]
studentSize = len(line)
for k in range(studentSize):
if line[k] > newStudent:
line.insert(k, newStudent)
step += (studentSize - k)
break
if k == studentSize-1:
line.append(newStudent)
print(i+1, step)
2023. 12. 09. 5일차 (5)
5. 8979번 올림픽 (실버5) 문제링크
문제 해석
올림픽에서 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 다음 규칙에 따라 어느 나라가 더 잘했는지 결정한다.
1. 금메달 수가 더 많은나라.
2. 금메달 수가 같다면, 은메달 수가 더 많은 나라.
3. 위 두개도 같다면, 동메달 수가 더 많은 나라.
한 국가의 등수는 (자신보다 더 잘한 나라수)+1 이다.
금은동메달 수가 모두 같다면 두 나라의 등수는 같다.
제한: 1초 128MB
입력
입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각 국가를 나타내는 정수와 이 국가가 얻은 금, 은, 동메달의 수가 빈칸을 사이에 두고 주어진다. 전체 메달 수의 총합은 1,000,000 이하이다.
출력
출력은 단 한 줄이며, 입력받은 국가 K의 등수를 하나의 정수로 출력한다. 등수는 반드시 문제에서 정의된 방식을 따라야 한다.
코드
84 ms
N, K = map(int, input().split())
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
arr.sort(key=lambda x: (-x[1], -x[2], -x[3]))
rank = [1] * N
n = 1
for i in range(1, N):
if arr[i-1][1:] == arr[i][1:]:
rank[arr[i][0]-1] = n
else:
rank[arr[i][0]-1] = i+1
n = i+1
print(rank[K-1])
이 문제의 포인트
* 이차원 리스트 특정 원소에 대해 정렬하는 방법.
mylist.sort(key=lambda x: (-x[1], -x[2], -x[3]))
- x 앞에 마이너스 기호는 내림차순 정렬을 한다는 의미
- x의 인덱스에 대해 차례대로 정렬하는 것. 앞에 있는 것이 제일 우선적으로 정렬하는 것.
- sort는 자체 정렬이고, 정렬한 리스트를 반환하려면 sorted(list, key = ...) 를 사용하면된다.
2023. 12. 11. 6일차 (1)
6. 7568번 덩치 (실버5) 문제링크
문제 해석
사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 등수를 매겨보려 한다.
덩치 표현 = (x, y ) = (몸무게 , 키)
A(x,y), B(p,q) 일 때 x>p , y>q 이라면 A의 덩치가 B의 덩치보다 더 크다고 말한다.
C(45, 181), B(55,173) 일때는 C,D 누구도 상대방보다 더 크다고 말할 수 없다.
N명의 집단에서 각 사람의 더치 등수는 자신보다 더 큰 덩치의 사람의 수로 정해진다.
자신의 덩치 등수 = 자신보다 더 큰 덩치의 사람 수 +1 이다.
제한: 2초 512MB
입력
첫 줄에는 전체 사람의 수 N이 주어진다. 그리고 이어지는 N개의 줄에는 각 사람의 몸무게와 키를 나타내는 양의 정수 x와 y가 하나의 공백을 두고 각각 나타난다.
2 ≤ N ≤ 50
10 ≤ x, y ≤ 200
출력
여러분은 입력에 나열된 사람의 덩치 등수를 구해서 그 순서대로 첫 줄에 출력해야 한다. 단, 각 덩치 등수는 공백문자로 분리되어야 한다.
코드
N = int(input())
arr = []
for i in range(N):
arr.append(list(map(int, input().split())))
# 나보다 큰 사람의 수를 rank에 저장한다.
rank = [0] * N
for i in range(N):
for j in range(N):
if i == j:
continue
if arr[i][0] < arr[j][0] and arr[i][1] < arr[j][1]:
rank[i] += 1
# 나보다 큰사람의 수 +1 을 해야 등수가 된다.
for v in rank:
print(v+1, end=" ")
이 문제의 포인트
* input().split()할 때 split()빼먹지 않도록 주의하기!
* 입력 제한 보고 브루트포스로 풀 수 있는 문제인지 확인하고 바로 브루트포스로 풀어버리기! 다른 방법 생각하면 시간 지체됨
2023. 12. 11 6일차 (2)
7. 9017번 크로스 컨트리 (실버3) 문제링크
문제 해석
크로스 컨트리 달리기. 야외의 지형에 들어진 코스를 달리는 운동경기이다.
코스는 4~12km
주자들의 개인 성적을 매기고, 이를 가지고 팀의 점수를 계산한다.
한팀당 6명의 선수.
팀 점수는 상위 네명 주자의 점수를 합하여 계산하고, 가장 점수가 낮은 팀이 우승한다,
점수 부여 기준은 결승점을 통과한 순서대로 점수를 받고 6명의 주자가 참가하지 못한 팀은 점수자체를 받지 못한다.
동점의 경우 다섯번째 주자가 가장 빨리 들어온 팀이 우승한다.
모든 선수들의 등수가 주어질 때. 우슨팀을 구하는 프로그램을 작성하여라.
제한: 1초 128MB
입력
입력 데이터는 표준입력을 사용한다. 입력은 T 개의 테스트 케이스로 주어진다. 입력 파일의 첫 번째 줄에 테스트 케이스의 수를 나타내는 정수 T 가 주어진다. 두 번째 줄부터는 두 줄에 하나의 테스트 케이스에 해당하는 데이터가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N (6 ≤ N ≤ 1,000)이 주어진다. 두 번째 줄에는 팀 번호를 나타내는 N 개의 정수 t1, t2, …, tN 이 공백을 사이에 두고 주어진다. 각 팀은 1 과 M(1 ≤ M ≤ 200)사이의 정수로 표현된다.
출력
출력은 표준출력을 사용한다. 하나의 테스트 케이스에 대한 우승팀의 번호를 한 줄에 출력한다.
코드
6명의 주자가 참가하지 못한 팀에는 등수가 주어지지 않고 다음 팀에 그 등수가 주어진다는 것을 유의해야한다.
60ms
T = int(input())
for _ in range(T):
N = int(input())
arr = list(map(int, input().split()))
# 팀별 인원수 계산
perArr = [0] * 1001
for i in range(N):
teamNo = arr[i]
perArr[teamNo] +=1
# [4번째 주자까지의 점수 합][5번째 주자의 점수][인원수][팀 번호]
teamRes = [[0, 0, 0, i] for i in range(1001)]
score = 0
for i in range(N):
teamNo = arr[i]
if perArr[teamNo] < 6:
continue
score += 1
team = teamRes[teamNo]
count = teamRes[teamNo][2]
if count < 4:
teamRes[teamNo][0] += score # 팀 점수
elif count == 4:
teamRes[teamNo][1] = score # 5번째 주자의 점수
teamRes[teamNo][2] += 1 # 팀 인원수
teamRes.sort(key = lambda x : (-x[2], x[0], x[1]))
print(teamRes[0][3])
2023. 12. 11 6일차 (3)
❌ 8. 1205번 등수 구하기 (실버4) 문제링크
문제 해석
각각 노래마다 랭킹 리스트가 있다.
게임할 때마다 얻는 점수가 내림차순으로 저장되어 있다.
위에서부터 몇번째 있는 점수인지로 등수가 결정된다.
같은 점수가 있을 때는 그러한 점수의 등수 중에 가장 작은 등수가 된다.
랭킹리스트에 올라갈 수 있는 점수의 개수 P가 주어진다.
리스트에 있는 점수 N이 내림차순으로 주어진다.
태수의 새로운 점수 N이 주어지고, 태수가 랭킹리스트에서 몇등을 하는지 구하는 프로그램을 작성하시오.
못올라가면 -1. 랭킹리스트가 꽉차있을 떄, 새 점수가 이전 점수보다 좋을 떄만 점수가 바뀐다.
제한: 2초 128MB
입력
첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보다 작거나 같은 자연수 또는 0이다. 둘째 줄에는 현재 랭킹 리스트에 있는 점수가 비오름차순으로 주어진다. 둘째 줄은 N이 0보다 큰 경우에만 주어진다.
출력
첫째 줄에 문제의 정답을 출력한다.
참고:https://alpyrithm.tistory.com/68
아이디어
N이 0일 경우 P는 10이상이므로 무조건 1을 출력
N이 P이고 마지막 등수보다 작거나 같으면 무조건 -1을 출력
그외에는
나보다 작거나 같은 점수가 나오면 해당 점수의 인덱스+1 이 본인의 등수
작거나 같은 점수가 나오지 않으면 있는 애들보다 작은거니까 N+1 이 본인의 등수이다.
코드
44ms
N, Tae, P = map(int, input().split())
arr = []
if N == 0:
print(1)
else:
arr += map(int, input().split())
if N == P and arr[-1] >= Tae:
print(-1)
else:
res = N + 1
for i in range(N):
if Tae>=arr[i]:
res = i+1
break
print(res)
2023. 12. 11 6일차 (4)
9. 10709번 기상캐스터 (실버5) 문제링크
문제 해석
JOI 시는 남북방향이 H킬로미터, 동서방향이 W킬로미터인 직사각형 모양이다.
바람으로 인해 1분이 지날 때 모든 구름은 1킬로미터씩 동쪽으로 이동한다.
각 구역의 하늘에 구름이 있는지 없는지를 알고 있다.
각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 예측하는 일을 맡았다.
각 구역에 대해 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 구하여라.
제한: 1초 256MB
입력
입력은 1 + H 행으로 주어진다.
첫 번째 행에는 정수 H, W (1 ≦ H ≦ 100, 1 ≦ W ≦ 100) 가 공백을 사이에 주고 주어진다. 이것은 JOI시가 H × W 개의 작은 구역으로 나뉘어 있다는 것을 의미한다.
이어진 H 개의 행의 i번째 행 (1 ≦ i ≦ H) 에는 W문자의 문자열이 주어진다. W 개의 문자 중 j번째 문자 (1 ≦ j ≦ W) 는, 구역 (i, j) 에 지금 구름이 떠 있는지 아닌지를 나타낸다. 구름이 있는 경우에는 영어 소문자 'c' 가, 구름이 없는 경우에는 문자 '.' 가 주어진다.
출력
출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시한다. 단, 처음부터 구역 (i, j) 에 구름이 떠 있었던 경우에는 0을, 몇 분이 지나도 구름이 뜨지 않을 경우에는 -1을 출력한다.
코드
입력값이 스페이스바로 구분되어있지 않다는 것을 유의해야 한다.
52ms
H, W = map(int, input().split())
arr = []
for _ in range(H):
arr.append(input())
for h in arr:
count = -1
for i in str(h):
if i == ".":
if count > -1:
count += 1
elif count == -1:
count = -1
else:
count = 0
print(count, end=" ")
print()
2023. 12. 11 6일차 (5)
10. 1244번 스위치 켜고 끄기 (실버4) 문제링크
문제 해석
1번 부터 연속적으로 번호가 붙어있는 스위치들이 있다.
스위치는 켜져 있거나 꺼져 있는 상태 (1: 켜짐, 0:꺼짐)
학생들은 자신의 성별과 받은 수에 따라 아래와 같은 방식으로 스위치를 조작하게 된다.
남학생: 스위치 번호가 자기가 받은 수의 배수이면 그 스위치의 상태를 바꾼다.
여학생: 자기가 받은 번호와 같은 번호가 붙는 스위치를 중심으로 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아서 그 구간에 속한 스위치의 상태를 모두 바꾼다.
제한: 2초 128MB
입력
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 있다. 셋째 줄에는 학생수가 주어진다. 학생수는 100 이하인 양의 정수이다. 넷째 줄부터 마지막 줄까지 한 줄에 한 학생의 성별, 학생이 받은 수가 주어진다. 남학생은 1로, 여학생은 2로 표시하고, 학생이 받은 수는 스위치 개수 이하인 양의 정수이다. 학생의 성별과 받은 수 사이에 빈칸이 하나씩 있다.
출력
스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 예를 들어 21번 스위치가 있다면 이 스위치의 상태는 둘째 줄 맨 앞에 출력한다. 켜진 스위치는 1, 꺼진 스위치는 0으로 표시하고, 스위치 상태 사이에 빈칸을 하나씩 둔다.
코드
여학생이 스위치를 바꿀때는 일단 자기가 받은 번호를 바꾼후 +1씩 옆에 있는 것들이 대칭인것을 바꿔나간다. (대칭이 아닌부분이 나오면 더이상 바꾸지않는다.)
20개씩 출력한다는 출력 조건도 잘 봐야한다.
44ms
N = int(input())
arr = [0] + list(map(int, input().split()))
M = int(input())
for _ in range(M):
gender, n = map(int, input().split())
#남학생
if gender == 1:
for i in range(1, N+1):
if n * i > N:
break
# 배수에 있는 스위치를 바꾼다.
arr[n*i] = 1 - arr[n*i]
#여학생
else:
arr[n] = 1 - arr[n]
for i in range(1, N+1):
if n + i > N or n - i < 1:
break
# 대칭인 스위치를 바꾼다.
if arr[n-i] == arr[n+i]:
arr[n + i] = arr[n-i] = 1 - arr[n-i]
else:
break
arrLen = len(arr)
for i in range(1, arrLen):
print(arr[i], end=" ")
if i % 20 == 0:
print()
이 문제의 포인트
* 유효 범위를 확인할 때 or 로 사용했는지 확인하기
if n+1 > N and n-i <1 로 적었다가 indexError 가 발생했었다.
추가문제
11. 2852번 NBA 농구 (실버3) 문제링크
12. 20006번 랭킹전 대기열 (실버2) 문제링크
13. 1138번 한줄로 서기 (실버2) 문제링크
14. 14503번 로봇 청소기 (골드5) 문제링크
15. 20055번 컨베이어 벨트 위의 로봇 (골드5) 문제링크
16. 14719번 빗물 (골드5) 문제링크
17. 22251번 빌런 호석 (골드5) 문제링크
18. 7490번 0 만들기 (골드5) 문제링크
19. 7682번 틱택토 (골드5) 문제링크
20. 15686번 치킨 배달 (골드5) 문제링크
21. 16234번 인구 이동 (골드5) 문제링크
22. 15662번 톱니바퀴(2) (골드5) 문제링크
23. 2636번 치즈 (골드4) 문제링크
24. 17144번 미세먼지 안녕! (골드4) 문제링크
25. 15685번 드래곤 커브 (골드4) 문제링크
26. 15683번 감시 (골드4) 문제링크
27. 16236번 아기상어 (골드3) 문제링크
28. 15684번 사다리 조작 (골드3) 문제링크
29. 17822번 원판 돌리기 (골드3) 문제링크
30. 16235번 나무 재테크 (골드3) 문제링크
31. 12100번 2048 (Easy) (골드2) 문제링크
32. 17825번 주사위 윷놀이 (골드2) 문제링크
33. 17837번 새로운 게임2 (골드2) 문제링크
34. 17143번 낚시왕 (골드2) 문제링크
'알고리즘 문제풀이' 카테고리의 다른 글
문자열 문제 및 풀이 (Python) (0) | 2023.12.04 |
---|---|
이진탐색(Binary Search) 문제 및 풀이 (Python) (0) | 2023.12.04 |
동적계획법(DP) 문제 및 풀이 (Python) (0) | 2023.12.04 |
완전탐색(브루트포스) 문제 및 풀이 (Python) (0) | 2023.12.04 |
너비 우선 탐색(BFS) 문제 및 풀이 (Python) (0) | 2023.12.04 |