새소식

PS/코드트리

[코드트리/삼성SW역량테스트] 예술성 (Python)

  • -

Problem : https://www.codetree.ai/training-field/frequent-problems/problems/artistry/

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

Difficulty : Gold 3

 

Status : Solved

 

Time : 00:24:43

 


 

문제 설명 / 입력 및 출력

 

더보기

 

자세한 설명은 코드트리 사이트 링크를 참조해 주세요!

 

 


 

풀이

 

그래프 회전을 유의하면 되겠다.(시계방향, 반시계방향, 각 사각형의 기준 좌표 맞추기) 이외에는 평범한 문제(물론 2차원 리스트 구현이 익숙하다는 전제 하에서...!)

 

 

풀이 코드

import sys input = sys.stdin.readline dr = [0, 0, -1, 1] dc = [-1, 1, 0, 0] N = int(input()) maps = [list(map(int, input().split())) for _ in range(N)] ans = 0 def search() : global group, visited visited = [[False]*N for _ in range(N)] group = list() for i in range(N) : for j in range(N) : if not visited[i][j] : dfs(i, j) def dfs(r, c) : target = maps[r][c] visited[r][c] = True _group = [target, (r, c)] q = [(r, c)] while q : r, c = q.pop() for i in range(4) : ar, ac = r + dr[i], c + dc[i] if -1 < ar < N and -1 < ac < N and not visited[ar][ac] and maps[ar][ac] == target : visited[ar][ac] = True _group.append((ar, ac)) q.append((ar, ac)) group.append(_group) def compare() : global ans for i in range(len(group) - 1) : group_1 = group[i] for j in range(i+1, len(group)) : group_2 = group[j] score = (len(group_1) + len(group_2) - 2) * group_1[0] * group_2[0] cnt = 0 for r1, c1 in group_1[1:] : for r2, c2 in group_2[1:] : if abs(r1 - r2) + abs(c1 - c2) == 1 : cnt += 1 score *= cnt ans += score def rotate_cross() : new_rotate = [[0]*N for _ in range(N)] for i in range(N) : for r, c in [(i, N//2), (N//2, i)] : new_rotate[N-c-1][r] = maps[r][c] for i in range(N) : for r, c in [(i, N//2), (N//2, i)] : maps[r][c] = new_rotate[r][c] def rotate_square(r, c) : new_rotate = [[0]*(N // 2) for _ in range(N // 2)] for i in range(N // 2) : for j in range(N // 2) : new_rotate[j][N//2-i-1] = maps[r+i][c+j] for i in range(N // 2) : for j in range(N // 2) : maps[r+i][c+j] = new_rotate[i][j] def rotate() : rotate_cross() for i in [0, N//2+1] : for j in [0, N//2+1] : rotate_square(i, j) for _ in range(4) : search() compare() rotate() print(ans)

풀이 완료!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.