Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- ElasticSearch
- kt 에이블스쿨 6기 ai
- 케이티 에이블스쿨 6기
- 케이티 에이블스쿨 6기 후기
- 파이썬
- 티스토리챌린지
- 머신러닝
- 프로그래머스
- kt 에이블스쿨 6기
- 케이티 에이블스쿨 6기 ai
- 판다스
- SQLD
- 구현
- 데이터 프레임
- kt aivle school
- 오블완
- 알고리즘
- 케이티 에이블스쿨 기자단
- kt 에이블스쿨 6기 빅프로젝트
- KT 에이블스쿨
- 앙상블
- kt 에이블스쿨 기자단
- 네트워크
- 케이티 에이블스쿨 6기 java
- KT AIVLE
- 엘라스틱서치
- kt 에이블스쿨 6기 미니 프로젝트
- 백준
- 케이티 에이블스쿨
- 에이블 기자단
Archives
- Today
- Total
미식가의 개발 일기
[백준/Python] #3085번 사탕 게임 본문


문제

- N x N 크기의 보드에 4가지 색의 사탕이 채워져 있음
- 인접한 서로 다른 두 사탕을 교환 후 모두 같은 색으로 이루어진 가장 긴 부분(행 또는 열)을 먹음
- 먹을 수 있는 사탕의 최대 개수는?
입력
보드의 크기 N (3 ≤ N ≤ 50)
보드에 채워진 사탕(빨강: C, 파랑: P, 초록: Z, 노랑: Y)
3 CCP CCP PPC
출력
먹을 수 있는 사탕의 최대 개수
3
정답
import sys
input = sys.stdin.readline
from collections import Counter
# 연속 행 또는 열의 최대 길이 반환
def check_cnt(n, target_list):
global max_cnt
for i in range(n):
# 가로 방향 카운트
cnt = 1
for j in range(n-1):
if target_list[i][j] == target_list[i][j+1]:
cnt += 1
else:
if cnt > max_cnt:
max_cnt = cnt
cnt = 1
if cnt > max_cnt:
max_cnt = cnt
# 세로 방향 카운트
cnt = 1
for j in range(n-1):
if target_list[j][i] == target_list[j+1][i]:
cnt += 1
else:
if cnt > max_cnt:
max_cnt = cnt
cnt = 1
if cnt > max_cnt:
max_cnt = cnt
# 모든 부분을 한번씩 교체
def change(n, board):
# 가로 교체
for i in range(n):
for j in range(n-1):
if board[i][j] != board[j+1][i]:
board[i][j], board[i][j+1] = board[i][j+1], board[i][j]
check_cnt(n, board)
board[i][j+1], board[i][j] = board[i][j], board[i][j+1]
# 세로 교체
for i in range(n):
for j in range(n-1):
if board[j][i] != board[j+1][i]:
board[j][i], board[j+1][i] = board[j+1][i], board[j][i]
check_cnt(n, board)
board[j+1][i], board[j][i] = board[j][i], board[j+1][i]
if __name__ == "__main__":
n = int(input())
board = [list(input().strip()) for _ in range(n)]
max_cnt = 0
change(n, board)
print(max_cnt)
해결 아이디어
- BF(완전 탐색)로 하나하나 인접한 원소를 교체 → `change()`
- 교체한 상태에서 연속된 색의 최대 길이를 업데이트 → `check_cnt()`
- 교체한 원소 다시 원위치 → `change()`
- 최종 max_cnt 출력
반응형
'Python > Algorithm' 카테고리의 다른 글
| [백준/Python] #6064번 카잉 달력 (1) | 2024.12.08 |
|---|---|
| [백준/Python] #1107번 리모컨 (1) | 2024.12.05 |
| [알고리즘] 우선순위 큐를 이용한 다익스트라(Dijkstra), 최단 경로 찾기 (1) | 2024.10.01 |
| [알고리즘] 최소 신장 트리(MST) - 크루스칼, 프림 (0) | 2024.09.26 |
| [알고리즘] 유니온 파인드(Union-Find) (0) | 2024.09.19 |