1861. 정사각형 방

2023. 9. 4. 17:17·swea

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LtJYKDzsDFAXc&categoryId=AV5LtJYKDzsDFAXc&categoryType=CODE&problemTitle=%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

T = int(input())
for tc in range(1,T+1):
    n = int(input())
    arr = [list(map(int,input().split())) for _ in range(n)]
    mx_cnt = 0
    mx_start = 0
    for k in range(n):
        for h in range(n):
            cnt = 1
            i, j = k,h
            start = arr[i][j]
            while True:
                for di, dj in [[0,1],[1,0],[0,-1],[-1,0]]:
                    ni, nj = i+di, j+dj
                    if 0<=ni<n and 0<=nj<n and arr[i][j]+1 == arr[ni][nj]:
                        cnt += 1
                        i, j = ni, nj
                        break
                else:
                    break
            if mx_cnt < cnt:
                mx_cnt = cnt
                mx_start = start
            elif mx_cnt == cnt and mx_start > start:
                mx_start = start
    print(f'#{tc} {mx_start} {mx_cnt}')

실행시간 확 줄인 다른 풀이

didj = [[0,1],[1,0],[0,-1],[-1,0]]
T = int(input())
for tc in range(1, T+1):
    N = int(input())
    arr = [list(map(int, input().split())) for _ in range(N)]
 
    ones = [0] * (N*N+1) # 연속으로 1이 커지는 경우를 표시할 배열
    for i in range(N):
        for j in range(N):
            for di, dj in didj:
                ni, nj = i+di, j+dj # arr[i][j]의 주변 칸이
                if 0<=ni<N and 0<=nj<N and arr[i][j]+1==arr[ni][nj]:
                    ones[arr[i][j]] = 1
    max_cnt = 0
    max_start = 0
    c = 0
    for k in range(N*N,0,-1):
        if ones[k]:
            c += 1
            if max_cnt<c:
                max_cnt = c
                max_start = k
            elif max_cnt==c:
                max_start = k
        else:   # ones[k]가 0이면
            c = 0
    print(f'#{tc} {max_start} {max_cnt+1}')
저작자표시 (새창열림)

'swea' 카테고리의 다른 글

2819. 격자판의 숫자 이어 붙이기  (0) 2023.09.25
7465. 창용 마을 무리의 개수  (0) 2023.09.25
1953. [모의 SW 역량테스트] 탈주범 검거  (0) 2023.09.04
4366. 정식이의 은행업무  (0) 2023.09.04
10966. 물놀이를 가자  (0) 2023.09.04
'swea' 카테고리의 다른 글
  • 2819. 격자판의 숫자 이어 붙이기
  • 7465. 창용 마을 무리의 개수
  • 1953. [모의 SW 역량테스트] 탈주범 검거
  • 4366. 정식이의 은행업무
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (381)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (1)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    코딩테스트준비
    99클럽
    개발자취업
    Til
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
1861. 정사각형 방
상단으로

티스토리툴바