코딩테스트

[Swift 알고리즘] 백준 BOJ 3003 - 킹, 퀸, 룩, 비숍, 나이트, 폰

유정주 2021. 9. 3. 00:10
반응형

[Swift 알고리즘] BOJ 3003 - 킹, 퀸, 룩, 비숍, 나이트, 폰

안녕하세요. 개발 중인 정주입니다.

 

오늘은 알고리즘 공부를 하며 가독성의 중요성을 느끼게 해 준 문제가 있어 포스팅을 남깁니다.

문제 자체는 최하 난이도이지만 마음의 다짐을 위해서요.

 

바로 시작하겠습니다


Github

https://github.com/jeongju9216/swiftAlgorithm

문제 정보

번호, 이름 : 3003 킹, 퀸, 룩, 비숍, 나이트, 폰

분류 : 수학, 구현, 사칙연산

문제 링크

https://www.acmicpc.net/problem/3003


풀이

단순 계산 문제입니다.

readLine()으로 6개의 입력을 받고 문제에 제시된 정상 체스 개수에서 입력 값을 빼주면 됩니다.


1차 코드

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
print(1 - input[0], 1 - input[1], 2 - input[2], 2 - input[3], 2 - input[4], 8 - input[5])

메모리 : 62232 KB

시간 : 8 ms

코드 길이 : 160 byte

 

처음 작성한 코드입니다.

코드 길이를 줄이고자 체스의 개수를 상수로 박았습니다.

하지만 코드를 보고있자니 정말 이게 최선인가? 하는 생각이 들었습니다.

반복문을 사용하면 코드 라인 수는 좀 길어져도 가독성이 훨씬 좋아질 것이라 생각했습니다.


최종 코드

let chessCount = [1, 1, 2, 2, 2, 8]
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
for i in 0..<input.count {
    print(chessCount[i] - input[i], terminator: " ")
}

메모리 : 62232 KB

시간 : 8 ms

코드 길이 : 188 byte

 

배열과 반복문을 이용해 재시도를 했습니다.

메모리, 시간은 그대로이고 코드 사이즈는 단 28 byte만 증가했습니다.

하지만 가독성도 훨씬 좋고 유지보수(할리는 없지만)에도 훨씬 유리합니다.


마무리 인사

제가 이 문제에서 느낀 것은 실전 코딩 테스트라면 단 하나라도 줄이기 위해 영혼을 갈아 넣어야겠지만

연습을 하는 동안에는 가독성 있는 코드를 작성하기 위해서도 노력을 해야 하는 것이 맞지 않을까입니다.

그래서 굳이 코드 라인 수를 손해보더라도 가독성이 좋게 수정을 하고 최종으로 채택을 한 것입니다.

연습 기간에는 시간복잡도의 손해를 보지 않는 선에서 가독성을 최대한 좋게 하기 위해 노력하려고 합니다.

 

감사합니다!


아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

반응형