오늘은 코딩테스트 준비를 위해 알고리즘 기초 특강을 들었습니다. 특강에서 다룬 내용 중 가위바위보 알고리즘 문제를 JavaScript로 풀어보며 다양한 접근 방식을 공부했습니다. 오늘 공부한 내용을 정리해보겠습니다.
가위바위보는 두 플레이어가 각각 가위, 바위, 보 중 하나를 선택하고, 그 결과를 판단하는 간단한 게임입니다. 이 문제를 JavaScript로 구현하면서 세 가지 방식으로 접근해보았습니다.
가장 직관적인 방법으로, 모든 경우의 수를 하나씩 선언하여 결과를 판단하는 코드입니다.
function rockPaperScissors(player1, player2) {
if (player1 === "가위" && player2 === "가위") return "Draw!";
if (player1 === "가위" && player2 === "바위") return "Player 2 Wins!";
if (player1 === "가위" && player2 === "보") return "Player 1 Wins!";
if (player1 === "바위" && player2 === "가위") return "Player 1 Wins!";
if (player1 === "바위" && player2 === "바위") return "Draw!";
if (player1 === "바위" && player2 === "보") return "Player 2 Wins!";
if (player1 === "보" && player2 === "가위") return "Player 2 Wins!";
if (player1 === "보" && player2 === "바위") return "Player 1 Wins!";
if (player1 === "보" && player2 === "보") return "Draw!";
return "입력한 값이 이상해요!";
}
조건문을 간략화하고, 삼항 연산자를 사용하여 코드를 더 짧고 효율적으로 만드는 방법입니다.
function rockPaperScissors(player1, player2) {
if (player1 === player2) return "Draw!"; // 무승부
// Player 1이 지는 경우의 수
if (
(player1 === "가위" && player2 === "바위") ||
(player1 === "바위" && player2 === "보") ||
(player1 === "보" && player2 === "가위")
) {
return "Player 2 Wins!";
} else {
return "Player 1 Wins!";
}
}
승리 조건을 간단하게 판단하는 방법입니다. 이 코드는 굉장히 짧아 유지보수는 쉬울 수 있으나 로직을 이해하는 시간이 걸립니다.
function rockPaperScissors(a, b) {
if (a === b) return 'Draw!';
return ['가위-보', '바위-가위', '보-바위'].includes(a+'-'+b) ? "Player 1 Wins!" : "Player 2 Wins!";
}
코드가 굉장히 가독성이 좋고 승리 조건을 쉽게 추가 할 수 있습니다.
오늘은 가위바위보 문제를 세 가지 방식으로 접근하며 JavaScript로 알고리즘 문제를 푸는 방법을 공부했습니다. 특히 includes 메서드를 활용한 방식은 코드의 가독성과 유지보수성을 크게 높여주는 것을 느꼈습니다. 알고리즘을 푸는 방법에는 정답이 없으며 좋은 코드를 향해 나아가기 위해 앞으로도 다양한 문제를 풀어보며 알고리즘 실력을 키워나가야겠습니다.
내일은 더 나은 컨디션으로 공부할 수 있기를 바라며, 오늘은 이만 마치겠습니다. 😊