CodeSignal-chessBoardCellColor-Python

cosmos·2023년 4월 26일
0
post-thumbnail
post-custom-banner

문제

코드

def check_color(x: str, y: int) -> str:
    if x in ['A', 'C', 'E', 'G']:
        if y % 2 == 1:
            return 'black'
        else:
            return 'white'
    else:
        if y % 2 == 1:
            return 'white'
        else:
            return 'black'
    

def solution(cell1: str, cell2: str) -> bool:
    cell1_x, cell1_y = cell1[0], int(cell1[-1])
    cell2_x, cell2_y = cell2[0], int(cell2[-1])
    
    cell1_color = check_color(cell1_x, cell1_y)
    cell2_color = check_color(cell2_x, cell2_y)
            
    return cell1_color == cell2_color

ChatGPT Code

def solution(cell1, cell2):
    x1, y1 = ord(cell1[0]) - 96, int(cell1[1])
    x2, y2 = ord(cell2[0]) - 96, int(cell2[1])
    return (x1 + y1) % 2 == (x2 + y2) % 2

ChatGPT 문제풀이

체스판에서 두 칸이 주어졌을 때, 그 두 칸이 같은 색인지 다른 색인지 판단하는 함수 solution(cell1, cell2) 를 구현해야 합니다.
두 칸의 색을 판단하기 위해서는 두 칸의 좌표 합이 홀수인지 짝수인지를 확인하면 됩니다. 좌표 합이 홀수면 두 칸은 다른 색이고, 좌표 합이 짝수면 두 칸은 같은 색입니다.
예를 들어, 칸 A1의 좌표는 (1, 1) 이고, 칸 C3의 좌표는 (3, 3)입니다. 이 두 칸의 좌표 합은 1 + 1 + 3 + 3 = 8 이므로 짝수입니다. 따라서, 이 두 칸은 같은 색입니다.
위 코드에서는 ord(cell1[0]) - 96 를 통해 첫번째 문자열의 숫자값을 구하고, 96을 뺌으로써 체스보드상의 인덱스를 얻습니다. int(cell1[1]) 을 통해 두번째 문자열을 숫자값으로 얻습니다. 이렇게 두 칸의 좌표를 구한 뒤 좌표 합을 구하고, 홀수인지 짝수인지 판별하여 결과값을 반환합니다.

ChatGPT 코드와의 비교

본인 코드: 전체 시간복잡도 O(1)
ChatGPT Code: 전체 시간복잡도 O(1)
ChatGPT 풀이 방식이 훨씬 간략하고 천재적으로 접근했다.

문제출처 & 깃허브

codesignal
github

post-custom-banner

0개의 댓글