파란색 : 풀면서 어려웠던 부분 or 고려해야 될 부분

빨간색 : 해결방법

초록색 : 느낀 점

문제

체스 말판이 위 특정 셀에 위치할 때 움직일 수 있는 방법의 개수를 구하는 문제이다.  특정 위치 이기 때문에  특정 셀 밑이거나 위에 있을 때 제한된다.

풀이 : 내가 작성한 코드

 

메모장에 적으면서

 처음 생각하기에 문자열의 앞cell[0]뒤cell[1] 8방향의 이동하게 문자를 더하는 값으로 확인이 가능할까 생각했지만 안된다고 판단하고, 체스 말이 위 체스 말이 움직 일 수 있는 방법이 최대 8가지이기 때문에 8방향을 모두 체크하고 각각 케이스에 검사하는 방법밖에 생각이 안 났다. 그래서 그냥 case문을..

풀이 : 다른 사람이 작성한 코드

가장 높은 vote를 받은 코드이다. 5개의 길이의 배열을 만드는데 무엇인가 했더니 체스 말판이 움직일 수 있는 방향 개수들이다. 그다음으로 문자 알파벳과 숫자를 체크하는데 'a'나 'h'를 빼는 이유는 체스가 저 두 문자에 위치했을 때 이동 방향 개수가 제한된다. 또, 체스 말판이 a에 가깝나 h에 가깝나를 체크한다. Math.Min(int,int )는 둘 중 작은 수를 반환하는 함수인데, 'a', h'에 가깝지 않아 2를 넘으면 4방향은 이동 가능이 보장이 된다. 반대로  마찬가지로 숫자 부분도 체크하여 리턴된 두 정수를 더한 뒤 배열에서 찾는다.. 

일단 문제 접근에 대한 방식 자체가 다르다ㅜ. 훨씬 더 깔끔하고 나도 문제에서 8가지 방향을 정해져 있다고 판단하고 포문을 8번 돌렸지만, 이 코드는 한 번 더 생각하여 제한된 이동 방향 개수 생각하고 그 값을 배열로 넣어두었다. 그리고 dist라는 말의 칸 이동 수가 정해져 있기 때문에 체스판 테두리에 가까웠을 때 제한되는 방법으로 깔끔하게 구현했다. 역시 접근 방법은 여러 가지로 생각하는 게 좋겠다. 

문제 : https://codesignal.com/

+ Recent posts