hgk0404.tistory
Code After Work
hgk0404.tistory

공지사항

전체 방문자
오늘
어제
  • 전체 카테고리 N
    • [컴퓨터비전]
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [머신러닝]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev] N
      • [가상환경] N
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404.tistory

Code After Work

[Coding Test]/[백준]

[백준] 3085: 사탕 게임

2022. 7. 16. 02:09
728x90

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

 

import sys
def solution():
    n = int(sys.stdin.readline())
    board = [ list(sys.stdin.readline().strip()) for _ in range(n) ]
    max_length = 1
    def max_candy_count(board, n):
        max_count = 1
        for i in range(n):
            row_count, col_count = 1, 1
            for j in range(n-1):
                if board[i][j] == board[i][j+1]: # 오른쪽 칸과 비교
                    row_count += 1
                    max_count = max(max_count, row_count)
                else:
                    row_count = 1 # 연속이 끊기면 다시 1부터 시작
                if board[j][i] == board[j+1][i]: # 아래 칸과 비교
                    col_count += 1
                    max_count = max(max_count, col_count)
                else:
                    col_count = 1 # 연속이 끊기면 다시 1부터 시작
        return max_count
    for i in range(n):
        for j in range(n-1):
            board[i][j], board[i][j+1] = board[i][j+1], board[i][j] # 한 칸 오른쪽과 비교
            max_length = max(max_length, max_candy_count(board, n))
            board[i][j], board[i][j+1] = board[i][j+1], board[i][j] # 원상 복구

            board[j][i], board[j+1][i] = board[j+1][i], board[j][i] # 한 칸 아래와 비교
            max_length = max(max_length, max_candy_count(board, n))
            board[j][i], board[j+1][i] = board[j+1][i], board[j][i]
    print(max_length)
solution()

한 개 칸씩(오른쪽, 아래) 교환해주며 보드의 가장 긴 연속부분을 탐색하고 탐색 후 원상 복구 하는 과정을 반복해서 실행하는 풀이법입니다. j를 반복할 때는 리스트 에러가 발생하지 않도록 n-1까지 반복해야 하고, 오른쪽 비교 시에는 board[i][j+1], 아래 칸과 비교 시에는 board[j+1][i]로 작성합니다.

 

728x90
저작자표시 동일조건 (새창열림)

'[Coding Test] > [백준]' 카테고리의 다른 글

[백준] 14889: 스타트와 링크  (0) 2022.08.25
[백준] 1158: 요세푸스 문제  (0) 2022.07.27
[백준] 2309: 일곱 난쟁이  (0) 2022.07.16
[백준] 4963: 섬의 개수  (0) 2022.07.10
[백준] 11724: 연결 요소의 개수  (0) 2022.07.08
'[Coding Test]/[백준]' 카테고리의 다른 글
  • [백준] 14889: 스타트와 링크
  • [백준] 1158: 요세푸스 문제
  • [백준] 2309: 일곱 난쟁이
  • [백준] 4963: 섬의 개수
hgk0404.tistory
hgk0404.tistory
공부기록

티스토리툴바