From 450c803f2f08339c6e9796f86b946b344c710f37 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 14 Sep 2025 18:03:53 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[PGS]#12905.=20=EA=B0=80=EC=9E=A5=20?= =?UTF-8?q?=ED=81=B0=20=EC=A0=95=EC=82=AC=EA=B0=81=ED=98=95=20=EC=B0=BE?= =?UTF-8?q?=EA=B8=B0/lv2/3h(=ED=9E=8C=ED=8A=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://school.programmers.co.kr/learn/courses/30/lessons/12905 --- ...01\355\230\225\354\260\276\352\270\260.py" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\240\225\354\202\254\352\260\201\355\230\225\354\260\276\352\270\260.py" diff --git "a/Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\240\225\354\202\254\352\260\201\355\230\225\354\260\276\352\270\260.py" "b/Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\240\225\354\202\254\352\260\201\355\230\225\354\260\276\352\270\260.py" new file mode 100644 index 0000000..e93f0ac --- /dev/null +++ "b/Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\240\225\354\202\254\352\260\201\355\230\225\354\260\276\352\270\260.py" @@ -0,0 +1,26 @@ +""" +유형 : DP +IDEA : dp(i,j)의 값에 만들 수 있는 정사각형 최대 길이로 할당하기 +FLOW +- if board[i][j] == 1 이면 + -> dp[i,j] = min( (i-1,j), (i,j-1) , (i-1,j-1)) + 1 대입 +""" +def solution(board): + answer = 0 + dp = [[0]*len(board[0]) for _ in range(len(board))] + #1. 반복문으로 board[i,j] 찾기 + for i in range(len(board)): + for j in range(len(board[0])): + if board[i][j] == 1 : + #2. dp로 (i,j)을 정사각형 오른쪽 아래 칸으로 가지는 최대 변의 길이 구하기 + if 0<=i-1<=len(board) and 0<=j-1 < len(board[0]): + dp[i][j] = min(dp[i-1][j] , dp[i][j-1] , dp[i-1][j-1]) +1 + # print(dp[i][j]) + + else : + dp[i][j] = 1 + answer= max(answer , dp[i][j]) + + # print(dp) + # print(answer) + return answer**2 \ No newline at end of file From e313b45a8dd0ebe938582796afe0331eef88d217 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 14 Sep 2025 18:04:10 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[BOJ]#1926.=20=EA=B7=B8=EB=A6=BC/=EC=8B=A4?= =?UTF-8?q?=EB=B2=841/38min?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/1926 --- .../\352\267\270\353\246\274.py" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\352\267\270\353\246\274.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\352\267\270\353\246\274.py" "b/Hongjoo/\353\260\261\354\244\200/\352\267\270\353\246\274.py" new file mode 100644 index 0000000..231c120 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\352\267\270\353\246\274.py" @@ -0,0 +1,65 @@ +""" +[BOJ]#1826.그림 +https://www.acmicpc.net/problem/1926 +# problem +- 그림은 1로 가로,세로(대각선x) 연결됨 +- 그림 넓이 = 1의 개수 (0:여백) +-goal) 전체 nxm 도화지 속 (1) 그림 개수 (2)그림들 중 최대 넓이 + *없으면 0 0 출력 +# flow +1. 그림 개수 구하기 + i. 전체 칸(i,j)을 기준점으로 BFS/DFS로 연결된 그래프 더미 찾기 + +2. 최대 그림 넓이 + - 그래프 탐색시 각 그래프에서 방문한 노드의 개수 확인&최대값 저장하기 +""" + +import sys +from collections import deque +# 1. 입력 변수 - 전체 도화지 크기 / 도화지 속 그림 위치 정보 +input = sys.stdin.readline +N,M = map(int, input().split()) + +canvas = [[0]*M for _ in range(N)] +for i in range(N): + canvas[i] = list(map(int, input().split())) +# print(canvas) +# 그림 개수 /최대 그림 넓이 변수 선언 +pic_cnt = 0 +pic_area = 0 + +#2. 전체 도화지 칸을 탐색하며서 BFS로 그림들 연결하기 +def bfs(start): + # 해당 노드 1 의 개수, 방문한 노드 위치 정보 -> canvas 의 0으로 기입 + one_cnt = 0 # start 초기화 + q =deque([start]) + canvas[start[0]][start[1]] = 0 + dy = [-1,1,0,0] # 상하좌우 이동 가능 + dx = [0,0,-1,1] + + while q : + cy,cx = q.popleft() + one_cnt +=1 #그림 넓이 추가 + + for d in range(4): + ny,nx= cy+dy[d], cx +dx[d] + + if 0<=ny 0 : # 그림이 존재하면, 그림 개수 +1 & 넓이 최대값 업데이트 + pic_cnt += 1 + pic_area = max(pic_area,area) + +print(pic_cnt) +print(pic_area) From bd8def0321354ba6fb829a53017bafd6a1983999 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 14 Sep 2025 18:04:21 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[BOJ]#5567.=20=EA=B2=B0=ED=98=BC=EC=8B=9D/?= =?UTF-8?q?=EC=8B=A4=EB=B2=842/15min?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/5567 --- .../\352\262\260\355\230\274\354\213\235.py" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\352\262\260\355\230\274\354\213\235.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\352\262\260\355\230\274\354\213\235.py" "b/Hongjoo/\353\260\261\354\244\200/\352\262\260\355\230\274\354\213\235.py" new file mode 100644 index 0000000..9ccf856 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\352\262\260\355\230\274\354\213\235.py" @@ -0,0 +1,37 @@ +""" +https://www.acmicpc.net/problem/5567 +1-> 2다리 이하 친구 관계만 초대 -> 총 인원수 파악 +1-2-3-4-5 +""" +import sys +from collections import deque +#1.양방향 인접 리스트 만들기 +input =sys.stdin.readline + +N = int(input()) +M = int(input()) +friends = [[] for _ in range(N+1)] # 1~ n 번까지 +for i in range(1,M+1): + x,y = map(int, input().split()) + friends[x].append(y) + friends[y].append(x) + +#2. lv2 이하인 BFS 가즈아~ +start = 1 +q = deque([[start,0]]) # 학번, 관계 거리 +visited = [start] +answer =-1 +while q : + cnum , crelationship= q.popleft() + if crelationship >= 3: + break # 거리가3 넘으면 강제종료 + answer +=1 + # print(f"#{cnum} : {crelationship}") + for nn in friends[cnum] : + if nn not in visited : + q.append([nn, crelationship+1]) + visited.append(nn) + + +# print(visited) +print(answer) \ No newline at end of file From cb2ec40ca3f1024cf180a19609a85f90e1ce17b2 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 14 Sep 2025 18:04:30 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[BOJ]#24501.=20blobaww/=EA=B3=A8=EB=93=9C3/?= =?UTF-8?q?=ED=9E=8C=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/24501 --- "Hongjoo/\353\260\261\354\244\200/blobaww.py" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/blobaww.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/blobaww.py" "b/Hongjoo/\353\260\261\354\244\200/blobaww.py" new file mode 100644 index 0000000..d7e04b0 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/blobaww.py" @@ -0,0 +1,58 @@ +import sys +answer =0 +N, M = map(int, sys.stdin.readline().split()) +board =[[] for _ in range(N)] +# E와 M의 누적합 행렬 정의 +e_sum = [[0]*M for _ in range(N)] +m_sum = [[0]*M for _ in range(N)] + +for i in range(N): + board[i] = list(sys.stdin.readline()[:-1]) + for j in range(M): + if board[i][j] == "E" : + e_sum[i][j] = 1 + elif board[i][j] == "M" : + m_sum[i][j] = 1 + +# 2.E와 M 행렬 누적합 계산하기 +# dp[i][j] = dp[i-1][j] + dp[i][j-1] -dp[i-1][j-1 + value[i][j] +for i in range(N): + for j in range(M): + # E의 누적합 계산 + # i=0 or j=0 일때 누적합 점화식 + if i==0 and j== 0 : + e_sum[0][0] = e_sum[0][0] + elif i== 0 : # 가로형 누적합 계산식 : + e_sum[i][j] = e_sum[0][j-1]+e_sum[0][j] + elif j == 0: # 세로형 누적합 계산식 + e_sum[i][j] = e_sum[i][0] + e_sum[i-1][0] + else : # 일반적인 누적합 계산식 + e_sum[i][j] = e_sum[i-1][j] + e_sum[i][j-1] - e_sum[i-1][j-1] + e_sum[i][j] + +#M의 누적합 계산 : E의 누적합의 역방향(아래로 뒤집기) +# 기준(i,j) : 왼쪽 위쪽 칸 +for i in range(N-1, -1 , -1): + for j in range(M-1 , -1 ,-1) : + # i=0 or j=0 일때 누적합 점화식 + if i== N-1 and j== M-1 : # 맨 오른쪽 아래 칸의 누적합 + m_sum[i][j] = m_sum[i][j] + elif i== N-1 : # 가로형 누적합 계산식 : + m_sum[i][j] = m_sum[i][j+1]+m_sum[i][j] + elif j == M-1 : # 세로형 누적합 계산식 + m_sum[i][j] = m_sum[i][j] + m_sum[i+1][j] + else : # 일반적인 누적합 계산식 + m_sum[i][j] = m_sum[i+1][j] + m_sum[i][j+1] - m_sum[i+1][j+1] + m_sum[i][j] + +#3. S 을 기준으로 총 경우의 수 구하기 +# 경우의 수 = E*M +answer = 0 +for y in range(N): + for x in range(M): + # S 의 위치 파악하기 + if board[y][x] == "S" : + # (y,x) 인 S의 기준에서 E*M 으로 경우의 수 구하기 + answer += e_sum[y][x]*m_sum[y][x] + + +#4. 나머지로 출력하기 +print(answer%(10**9+7)) \ No newline at end of file From cb0527e3bcefce1f890906b6304f3a5bc037038c Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 14 Sep 2025 18:04:40 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[BOJ]#9251.=20LCS/=EA=B3=A8=EB=93=9C5/?= =?UTF-8?q?=ED=9E=8C=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/9251 --- "Hongjoo/\353\260\261\354\244\200/lcs.py" | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/lcs.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/lcs.py" "b/Hongjoo/\353\260\261\354\244\200/lcs.py" new file mode 100644 index 0000000..35b8550 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/lcs.py" @@ -0,0 +1,31 @@ +""" +[BOJ]#9251.LCS / DP /Gold5/ 2025.09.09 +https://www.acmicpc.net/problem/9251 +##### + +""" +import sys +input = sys.stdin.readline +# 1. 입력 변수 - a 문자열 / b문자열 +a = list(input())[:-1] +b= list(input())[:-1] +# LCS 행렬 0 초기화 +lcs = [[0]*(len(b)+1) for _ in range(len(a)+1)] + +#2. LCS (Longest Common Subsequence) 점화식 +""" +i. a[i] VS b[j] 문자 비교하기 + (1) SAME(=) -> dp[i][j] = 위쪽 대각선 +1 + (2) DIFF(!=) -> dp[i][j] = MAX(왼쪽 , 위쪽) + +ii. 최종 LCS = dp[-1][-1] +""" +for i in range(1,len(a)+1) : + for j in range(1, len(b)+1) : + if a[i-1] == b[j-1]: + lcs[i][j] = lcs[i-1][j-1] + 1 + else : + lcs[i][j] = max(lcs[i-1][j] , lcs[i][j-1]) + +# print(lcs) +print(lcs[-1][-1]) \ No newline at end of file From 53a83d7215a78e4cc435f41c4ac3728f0f97916f Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 14 Sep 2025 18:04:53 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[BOJ]#12865.=20=ED=8F=89=EB=B2=94=ED=95=9C?= =?UTF-8?q?=EB=B0=B0=EB=82=AD=5F2=ED=8A=B8/=EA=B3=A8=EB=93=9C5/h(=EC=9E=AC?= =?UTF-8?q?=EB=8F=84=EC=A0=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/12865 --- ...355\225\234\353\260\260\353\202\255_2t.py" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\355\217\211\353\262\224\355\225\234\353\260\260\353\202\255_2t.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\355\217\211\353\262\224\355\225\234\353\260\260\353\202\255_2t.py" "b/Hongjoo/\353\260\261\354\244\200/\355\217\211\353\262\224\355\225\234\353\260\260\353\202\255_2t.py" new file mode 100644 index 0000000..3c6bc64 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\355\217\211\353\262\224\355\225\234\353\260\260\353\202\255_2t.py" @@ -0,0 +1,29 @@ +""" +[BOJ]평범한 배낭_2트/09.14.2025 +https://www.acmicpc.net/problem/12865 +""" + +import sys +input =sys.stdin.readline +#1. 입력 변수 - 물품 총 개수 / 제한 무게 / 물건별 무게 w, 가치 v +N , K = map(int,input().split()) +items = [[] for _ in range(N+1)] +for i in range(1,N+1): + items[i] = list(map(int, input().split())) +# print(items) +#2. DP : 0-1 Knapsack 문제 +# DP[k][i]: 최대 K kg 제한을 가진 가방안에 0~ i번쨰 item 까지 탐색 후 최대 가치 +#(물건 w > 배낭 무게 k) dp[k][i] = dp[k][i-1] #물건i는 못 넣음 +#(물건 w <= 배낭 무게 k) dp[k][i] = max(item[v] + dp[k-w][i-1],dp[k][i-1]) # 물건i를 넣거나(배낭 K-item 무게 만큼의 최대값 + 물건 i 넣기) , 안넣거나 + +dp = [[0]*(N+1) for _ in range(K+1)] +for k in range(1,K+1) : + for i in range(1, N+1): + if items[i][0] <= k : + dp[k][i] = max(dp[k-items[i][0]][i-1] + items[i][1],dp[k][i-1] ) + else : + dp[k][i] =dp[k][i-1] + +# print(dp) +#3. dp[-1][-1] = 최종 배낭 K kg에서 최대 가치 출력 +print(dp[-1][-1]) \ No newline at end of file