greenhelix
greenhelix
greenhelix
11-01 13:31
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#50_Code Signal Arcade >> Chess Knight
Algorithm/Java

#50_Code Signal Arcade >> Chess Knight

2020. 6. 28. 20:31

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요! \


Chess Knight

체스판에서 말이 갈 수 있는 곳

 

문제의 내용은 체스판 위에 말이 있습니다. 나이트라고 하죠. 이 말의 현재 위치를 제공해줍니다. 

이 경우에 현재 말의 위치에서 갈 수 있는 위치의 수를 리턴해달라는 문제입니다. 

 

a1에 위치한 경우 ----- c2에 위치한 경우 ------- d4에 위치한 경우

어느정도 패턴이 보입니다. 이 패턴을 이해하고 풀이 하면 됩니다. 

 

말이 특정 위치에 있으면 갈 수 있는 곳이 한정되어있으므로 어느 구역에 있다면 어느정도 패턴이 보입니다. 

이런식으로 말이죠. 

답안을 보겠습니다. 

    int chessKnight(String cell) {
        //string -> char -> int 형으로 한번에 바꾸기
        int alpha = (int)cell.charAt(0);
        //string -> char -> int형이면서, 숫자 그대로 내보내줌.(아스키롤 안바꿈)
        int num = Integer.parseInt(cell.substring(1));
        System.out.println(alpha);
        System.out.println(num);

        if(num <7 && num >2){
            if(alpha < 103 && alpha > 98){return 8;}
            else if(alpha == 98 || alpha == 103){return 6;}
            else if(alpha == 97 || alpha == 104){return 4;}
        }
        else if(num == 2 || num == 7){
            if(alpha <103 && alpha > 98){return 6;}
            else if(alpha ==98 || alpha == 103){return 4;}
            else if(alpha ==97 || alpha == 104){return 3;}
        }
        else if(num == 1 || num == 8){
            if(alpha <103 && alpha > 98){return 4;}
            else if(alpha ==98 || alpha == 103){return 3;}
            else if(alpha ==97 || alpha == 104){return 2;}
        }
        
        
        System.out.println("something else...");
        return 0; 
        
    }

이런식으로 범위를 할당하고 갈 수 있는 경우의 수를 설정해주면 됩니다. 

 

그러나 아래의 고수의 풀이를 보면 그 return값의 결정을 수학 연산을 적용해서 했더군요. 

더 간단한 방법으로 보입니다. 


이제 엘리트 분들의 답안을 감상하자... 

JAVA

int chessKnight(String cell) {
    int moves = 8;
    if (cell.charAt(0) == 'b' || cell.charAt(0) == 'g') {
        moves -= 2;
    }
    if (cell.charAt(1) == '2' || cell.charAt(1) == '7') {
        moves -= 2;
    }
    if (cell.charAt(0) == 'a' || cell.charAt(0) == 'h') {
        moves /= 2;
    }
    if (cell.charAt(1) == '1' || cell.charAt(1) == '8') {
        moves /= 2;
    }
    return moves;
}

/= 와 -= 을 통해서 각 경우의 위치를 설명하고 charAt()을 통해 각 자리의 숫자와 문자를 추출하여 경우의수를 구분하였습니다. 이 방법이 더 재밌네요. 

 

Python3

def chessKnight(c):
    x,y = ord(c[0])-96, int(c[1])
    return sum([1<=(x+i)<=8 and 1<=(y+j)<=8 for i in [-2,-1,1,2] for j in [-2,-1,1,2]])//2

sum() 함수와 for 반복문을 통해서 수학연산을 적용해서 풀이한 방법같습니다. 

 

JS

function chessKnight(cell) {
    const chessBoard = [
        [2,3,4,4,4,4,3,2],
        [3,4,6,6,6,6,4,3],
        [4,6,8,8,8,8,6,4],
        [4,6,8,8,8,8,6,4],
        [4,6,8,8,8,8,6,4],
        [4,6,8,8,8,8,6,4],
        [3,4,6,6,6,6,4,3],
        [2,3,4,4,4,4,3,2],
    ]
    
    const x = cell[0].charCodeAt() - 97;
    console.log(x)
    return chessBoard[cell[1] - 1][x]
}

위의 패턴을 활용해서 , 아예 체스판을 만들었네요. 이런식으로 하는 것도 재밌습니다. 

 

 

 

 

 

공감 버튼 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!

부탁드려요 돈드는거 아니잖아요~

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Java' 카테고리의 다른 글

#51_Code Signal Arcade >> Delete Digit  (0) 2020.07.01
#49_Code Signal Arcade >> Line Encoding  (0) 2020.06.27
#48_Code Signal Arcade >> is Digit  (0) 2020.06.10
    'Algorithm/Java' 카테고리의 다른 글
    • #52_Code Signal Arcade >> Longest Word
    • #51_Code Signal Arcade >> Delete Digit
    • #49_Code Signal Arcade >> Line Encoding
    • #48_Code Signal Arcade >> is Digit
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바