#1618 판도 저장용 (308)
작성자:frontier◆375yl3Cdme
작성일:2025-02-21 (금) 11:28:35
갱신일:2026-03-09 (월) 07:56:21
#0frontier◆375yl3Cdme(HVEm..SaGW)2025-02-21 (금) 11:28:35
_ -  ̄ ‐- .
_, -、 /' '" 、 ` 、 /´ l
/ r 、 } / ヽ 、 { j
l ゝ、 リ /' 、_ ヽ ヽ.__ノ ___
(`ヽt__,.ノ 〆 ' / \ 、 / ヽ f l
ヽ ヽ. _,.〆 ./ ,' ', \ / / l l__,.._
r-―''" `ー-''" / ' { : :. ', \ `ー-''''" _,.....,_ )
L.. -――- -, rーj : { .l ' : j .! } >⊂⊃>r''7`ヽ.
/ / ', :. l .|_ l :. : ハ_! ; ' 7'''"V'" ヽヒr 、 ヘ
_,...f'=-∠.._ ハ:. !、ト、 {\::. /´j .ル' } / { j < j
>-f_,..>--< ヾ :. l.ヽ芹丐` ヽ /ソ '"芹丐/ 〈 ヽ..____,ノ `
{ l .\ ', 込ツ-―――- 込ツノ //, ," jl .j.ト/
ヽ. / ヽ! ゝ. ' '"| ´ イ: ハl_l l |.|
 ̄ ̄ ̄ / ̄ T" ̄ ヽ――.、 | .l.イ l. ゝ !
. ,..../ | l ,' / ̄\ ´ /| .! | .! |
_/ .!. : .l , / ー イ /! /! | .! |
. _/ l : l. , ./ ' ヽ_ .j / \ ト、 .!
/ . ', .l : .! , ./ ' / ヽ/ 二 ニ |二\ |
. / ヽ . l. : !. , / . ' / .}、/ j二ニニ\!
. \ ヽ '. .l : l / ' / ' ヽニニニニニ\
. \ ヽ '. ,.-‐ >-―'""` 、 ./ .' ./ ' ,. -マニ>'",. <::}
. \.. ヽ _ '" ./ ,.-‐'" ー' ' / ' ,..'" ', / ,.ヽ
\ ./´ / ./ .l ,' ./ ,.' / , ' ,..'" >' / _!__
\ / { ./ ,.' : l , .>‐''''_ ‐ 、 ,.'" > '"./ ,.'" ̄__!
\.! ./ /-―::::::::::::::<´/, > '" .>'"ニニニ/ / ,.<二ニニ,!
\/::::::::>-ァ-,::::::::::ヽ.'" .>'"ニ尼ニニ,./,イニ尼ニニ,!
_-ニ\ / /./!::>'" >'"二二二ニ尼ニニ//二二尼尼尼ニl
/ニ>ィ/ /.//! .>'"´ニ ニ 二 二 二 二尼ニ/イ二二二尼尼ニニl
,.イ,.ィ ./ "//.'" =二 二 二 二 二 二二二 二.}二二尼/尼尼ニニl
"For the good of all of us, except the ones who are dead."
#159frontier◆375yl3Cdme(MBTJjdAp26)2025-07-13 (일) 05:21:06
# 숫자 분류
def classify(n):
if n in {1, 2, 3}:
return '123'
elif n in {4, 5}:
return '45'
elif n == 6:
return '6'
elif n == 7:
return '7'
return ''
# 방향 이름 매핑
direction_names = {
(0, 1): '→ (가로)',
(1, 0): '↓ (세로)',
(1, 1): '↘ (오른쪽 아래 대각선)',
(1, -1): '↙ (왼쪽 아래 대각선)'
}
# 분류별 연속 직선 카운트 + 정보 출력 함수
def find_lines_with_info(grid):
rows, cols = len(grid), len(grid[0])
class_grid = [[classify(n) for n in row] for row in grid]
counts = {'123': 0, '45': 0, '6': 0, '7': 0}
lines = []
# 방향 벡터: → ↓ ↘ ↙
directions = [(0,1), (1,0), (1,1), (1,-1)]
visited = set()
for r in range(rows):
for c in range(cols):
current_class = class_grid[r][c]
if not current_class:
continue
for dr, dc in directions:
line = [(r, c)]
nr, nc = r + dr, c + dc
while 0 <= nr < rows and 0 <= nc < cols and class_grid[nr][nc] == current_class:
line.append((nr, nc))
nr += dr
nc += dc
if len(line) >= 3:
key = (line[0], dr, dc, len(line))
if key not in visited:
visited.add(key)
counts[current_class] += 1
lines.append({
'class': current_class,
'start': line[0],
'direction': direction_names.get((dr, dc), f'({dr},{dc})'),
'positions': line
})
return counts, lines
# ✅ 사용자로부터 행렬 입력 받기
def read_matrix_from_input():
print("행렬을 입력하세요 (행마다 숫자를 띄어쓰기로 구분하고, 빈 줄로 종료):")
matrix = []
while True:
try:
line = input().strip()
if not line:
break
row = list(map(int, line.split()))
matrix.append(row)
except EOFError:
break
return matrix
# ✅ 실행
matrix = read_matrix_from_input()
counts, lines = find_lines_with_info(matrix)
# ✅ 출력
print("\n분류별 감지된 직선 개수:")
for group, count in counts.items():
print(f"({group}): {count}개")
print("\n감지된 직선 정보:")
for line in lines:
print(f"- 분류 ({line['class']}), 시작점 {line['start']}, 방향 {line['direction']}, 좌표들: {line['positions']}")
def classify(n):
if n in {1, 2, 3}:
return '123'
elif n in {4, 5}:
return '45'
elif n == 6:
return '6'
elif n == 7:
return '7'
return ''
# 방향 이름 매핑
direction_names = {
(0, 1): '→ (가로)',
(1, 0): '↓ (세로)',
(1, 1): '↘ (오른쪽 아래 대각선)',
(1, -1): '↙ (왼쪽 아래 대각선)'
}
# 분류별 연속 직선 카운트 + 정보 출력 함수
def find_lines_with_info(grid):
rows, cols = len(grid), len(grid[0])
class_grid = [[classify(n) for n in row] for row in grid]
counts = {'123': 0, '45': 0, '6': 0, '7': 0}
lines = []
# 방향 벡터: → ↓ ↘ ↙
directions = [(0,1), (1,0), (1,1), (1,-1)]
visited = set()
for r in range(rows):
for c in range(cols):
current_class = class_grid[r][c]
if not current_class:
continue
for dr, dc in directions:
line = [(r, c)]
nr, nc = r + dr, c + dc
while 0 <= nr < rows and 0 <= nc < cols and class_grid[nr][nc] == current_class:
line.append((nr, nc))
nr += dr
nc += dc
if len(line) >= 3:
key = (line[0], dr, dc, len(line))
if key not in visited:
visited.add(key)
counts[current_class] += 1
lines.append({
'class': current_class,
'start': line[0],
'direction': direction_names.get((dr, dc), f'({dr},{dc})'),
'positions': line
})
return counts, lines
# ✅ 사용자로부터 행렬 입력 받기
def read_matrix_from_input():
print("행렬을 입력하세요 (행마다 숫자를 띄어쓰기로 구분하고, 빈 줄로 종료):")
matrix = []
while True:
try:
line = input().strip()
if not line:
break
row = list(map(int, line.split()))
matrix.append(row)
except EOFError:
break
return matrix
# ✅ 실행
matrix = read_matrix_from_input()
counts, lines = find_lines_with_info(matrix)
# ✅ 출력
print("\n분류별 감지된 직선 개수:")
for group, count in counts.items():
print(f"({group}): {count}개")
print("\n감지된 직선 정보:")
for line in lines:
print(f"- 분류 ({line['class']}), 시작점 {line['start']}, 방향 {line['direction']}, 좌표들: {line['positions']}")