Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name":"Local: 제곱수찾기","url":"d:\\AlgoLeadME-15\\AlgoLeadMe-15\\Seol-Munhyeok\\제곱수찾기.py","tests":[{"id":1755608679338,"input":"2 3\n123\n456","output":"64"},{"id":1755610569758,"input":"9 9\n257240281\n197510846\n014345401\n035562575\n974935632\n865865933\n684684987\n768934659\n287493867","output":"95481"},{"id":1755613365657,"input":"1 1\n1","output":""},{"id":1755613442978,"input":"1 2\n12","output":""}],"interactive":false,"memoryLimit":1024,"timeLimit":3000,"srcPath":"d:\\AlgoLeadME-15\\AlgoLeadMe-15\\Seol-Munhyeok\\제곱수찾기.py","group":"local","local":true}
7 changes: 7 additions & 0 deletions Seol-Munhyeok/30번
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
t = int(input())
for _ in range(t):
a, b = map(int, input().split())
while a != b:
if a > b: a //= 2
else: b //= 2
print(10 * a)
5 changes: 4 additions & 1 deletion Seol-Munhyeok/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,7 @@
| 17차시 | 2025.08.01 | 구현, 시뮬레이션, 백트래킹 | [청소년 상어](https://www.acmicpc.net/problem/19236) | https://github.com/AlgoLeadMe/AlgoLeadMe-15/pull/61 |
| 18차시 | 2025.08.05 | 브루트포스, 애드 혹, 홀짝성 | [램프](https://www.acmicpc.net/problem/1034) | https://github.com/AlgoLeadMe/AlgoLeadMe-15/pull/62 |
| 19차시 | 2025.08.10 | 구현, BFS | [거리두기 확인하기](https://school.programmers.co.kr/learn/courses/30/lessons/81302) | https://github.com/AlgoLeadMe/AlgoLeadMe-15/pull/67 |
| 20차시 | 2025.08.14 | DP | [코딩 테스트 공부](https://school.programmers.co.kr/learn/courses/30/lessons/118668) | https://github.com/AlgoLeadMe/AlgoLeadMe-15/pull/73 |
| 20차시 | 2025.08.14 | DP | [코딩 테스트 공부](https://school.programmers.co.kr/learn/courses/30/lessons/118668) | https://github.com/AlgoLeadMe/AlgoLeadMe-15/pull/73 |
AlgoLeadMe/AlgoLeadMe-15/pull/67 |
| 21차시 | 2025.08.18 | 시뮬레이션, 그리디 | [양궁 대회](https://school.programmers.co.kr/learn/courses/30/lessons/92342) | https://github.com/AlgoLeadMe/AlgoLeadMe-15/pull/75 |
| 22차시 | 2025.08.23 | 그리디, 투 포인터 | [두 큐 합 같게 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/118667) | https://github.com/AlgoLeadMe/AlgoLeadMe-15/pull/79 |
26 changes: 26 additions & 0 deletions Seol-Munhyeok/두큐합같게만들기1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from collections import deque

def solution(queue1, queue2):
q1, q2 = deque(queue1), deque(queue2)
sum1, sum2 = sum(q1), sum(q2)

if (sum1 + sum2) % 2 == 1:
return -1

n = len(q1)
for i in range(4*n+1):
if sum1 > sum2:
value = q1.popleft()
q2.append(value)
sum1 -= value
sum2 += value
elif sum1 < sum2:
value = q2.popleft()
q1.append(value)
sum2 -= value
sum1 += value
else:
return i

return -1

30 changes: 30 additions & 0 deletions Seol-Munhyeok/두큐합같게만들기2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 투 포인터 풀이
# https://blog.encrypted.gg/1076 를 참고함

def solution(queue1, queue2):
n = len(queue1)
a = queue1 + queue2
target = sum(a)
if target % 2 != 0:
return -1
target //= 2 # 합이 target이 되는 구간을 찾아야 함

ans = int(1e9) # 일단 매우 큰 값을 넣어놓고 시작
en = 0
tot = a[0] # 현재 보는 구간의 합 = a[st]+...+a[en], 범위가 양 끝을 포함(inclusive)한다는 점과 en < st일 땐 a[st]+...+a[2*n-1]+a[0]+...+a[en]을 나타냄에 주의
for st in range(2*n):
while tot < target:
en = (en + 1) % (2*n)
tot += a[en]

# while문을 탈출하면 a[st]+...+a[en] 구간의 합이 target 이상임을 의미
if tot == target: # 구간의 합이 정확히 target과 일치할 경우
moves = 0 # 작업 횟수
if en < n-1: moves = 3*n + 1 + st + en # 3n+1번의 연산을 통해 큐1에 첫 번째 원소만 남길 수 있고, 이후 st+en 번의 추가적인 연산을 거쳐 a[st] .. a[en]을 큐1에 둘 수 있음
else: moves = st + (en - n + 1)
ans = min(ans, moves)

tot -= a[st]

if ans == int(1e9): ans = -1
return ans
38 changes: 38 additions & 0 deletions Seol-Munhyeok/양궁대회.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
def get_points(a, r):
a_point, r_point = 0, 0
for i in range(11):
if a[i] == r[i] == 0: continue
if a[i] >= r[i]:
a_point += (10 - i)
else:
r_point += (10 - i)
return (a_point, r_point)

def get_combinations(n, r, cur):
# 마지막일 때는 n을 추가
if r == 1:
return [cur + [n]]

results = []
for i in range(n + 1):
results += get_combinations(n - i, r - 1, cur + [i])

return results


def solution(n, info):
answer = []
max_point = 0
cands = get_combinations(n, 11, [])
sorted_cands = sorted(cands, key=lambda x: tuple(x[::-1]), reverse=True)

for cand in sorted_cands:
a_point, r_point = get_points(info, cand)
if a_point >= r_point: continue

diff = r_point - a_point
if diff > max_point:
max_point = diff
answer = cand

return answer if answer else [-1]
33 changes: 33 additions & 0 deletions Seol-Munhyeok/제곱수찾기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import math

answer = -1

def is_square(n):
return math.isqrt(n) ** 2 == n

def brute():
global answer
if n == 1 and m == 1:
return A[0][0] if is_square(int(A[0][0])) else -1

for r0 in range(n):
for c0 in range(m):
for dr in range(-(n-1), n):
for dc in range(-(m-1), m):
if dr == 0 and dc == 0:
continue
r, c = r0, c0
num = ""
while 0 <= r < n and 0 <= c < m:
num += A[r][c]
val = int(num)
if is_square(val):
answer = max(answer, val)
r += dr
c += dc
return answer

n, m = map(int, input().split())
A = [list(input()) for _ in range(n)]

print(brute())