- 깃허브를 commit, branch, merge 체험
- javascript 강의 1주차 복습
- 코딩테스트 풀기
https://school.programmers.co.kr/learn/courses/30/lessons/12916
https://school.programmers.co.kr/learn/courses/30/lessons/76501- 내일부터 만들 야구게임 혼자 코딩
코딩 테스트 두번째 푸는 문제였는데 지난번보다 훨씬 간결한 코드를 썼다.
처음풀땐 이렇게 방구를 덕지덕지 붙인 느낌이었다면

오늘은 toUpperCase()로 대문자를 만들고 잘라서 길이를 구하므로써 해결할 수 있었다.
function solution(s) {
let sSum = s.toUpperCase().split("P").length-1;
let ySum = s.toUpperCase().split("Y").length-1;
return (sSum===ySum) ? true : false;
};
처음엔 true를 +로, false를 -로 바꿔버리고, map, filter와 같이 두 배열을 조합해서 새로운 배열을 만들고 배열의 요소들끼리 합계를 구하는 코드를 만들려고 노력했으나 너무 힘들어서 이게 맞는거야? 싶어서 다른 사람이 푼 풀이를 보니 진짜 너무 간단하게 풀어서 그게 기억에 남았었다. 그래서 이번에 그 기억을 떠올려 해결했다.
function solution(absolutes, signs) {
let sum = 0;
for (let i = 0; i<signs.length; i++){
if ( signs[i] === true ) {
sum += absolutes[i];
} else {
sum -= absolutes[i];
}
}
return sum;
};
야구게임이 무엇인고 하면 아래와 같다.
- 컴퓨터는 0과 9 사이의 서로 다른 숫자 3개를 무작위로 뽑습니다. (ex) 123, 759 - 사용자는 컴퓨터가 뽑은 숫자를 맞추기 위해 시도합니다. - 컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려줍니다. - 숫자의 값과 위치가 모두 일치하면 S - 숫자의 값은 일치하지만 위치가 틀렸으면 B - 기회는 무제한이며, 몇번의 시도 후에 맞췄는지 기록됩니다. - 숫자 3개를 모두 맞춘 경우, 게임을 종료합니다.실행환경 예상 화면 컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요! 1번째 시도 : 134 0B0S 2번째 시도 : 238 1B1S 3번째 시도 : 820 2B1S 4번째 시도 : 028 3B 5번째 시도 : 280 3S 4번만에 맞히셨습니다. 게임을 종료합니다.
접근방법은 이랬다.
1. 서로 다른 랜덤한 숫자(getRandomNum)를 만든다. ~~(Math.random() * 10)
2. 사용자 입력값(getInputNum)을 받는다. ( prompt로 입력값 받기 _ 입력값 유효성 검사)
3. 입력값과 랜덤숫자를 비교한다.
getInputNum의 숫자가 getRandomNum안에 숫자가 있는가? getInputNum의 숫자와 getRandomNum의 숫자의 인덱스가 같은가?터미널창에서 prompt를 사용하기 위한 방법
1. 터미널에 prompt-sync 설치
npm install prompt-sync2. 코드영역에 넣기
const prompt=require("prompt-sync")({sigint:true});
1. 서로 다른 랜덤 숫자 생성
let answer = function () { //1-1. 랜덤 숫자 뽑기 let arr = []; while (arr.length < 3) { let randomNum = ~~(Math.random() * 10); if (!arr.includes(randomNum)) { arr += randomNum; }; }; //1-2. 답안 let count = 0; console.log(`컴퓨터가 숫자(${arr})를 생성하였습니다. 답을 맞춰보세요!`); checkNum(arr, count); };2. 사용자 입력값 받기
let getInputNum = function () { let value = prompt("숫자 3개를 입력해주세요"); if (value === null) { console.log("다시 입력해주세요"); return getInputNum(); } else if (value.match(/\D/)) { console.log("3자리 수의 숫자만 입력해야합니다."); return getInputNum(); } else if (value.length > 3) { console.log("입력한 값의 길이는 3을 넘을 수 없습니다."); return getInputNum(); } return value; };3. 랜덤 숫자와 input 숫자 비교하기
let checkNum = function (randomNum, count) { let inputNum = getInputNum(); count++; console.log(`${count}번째 시도 : ${inputNum}`); let sCount = 0; let bCount = 0; let str=0; inputNum.split("").forEach((e, idx) => { //forEach is not a function: 문자열은 배열이 아니라서 생김=> split로 나눠서 배열로 만들면 해결 if(randomNum.indexOf(e)===idx){ //인덱스값 반환하여 맞는지 확인 sCount++; } else if (randomNum.split('').includes(e)){ bCount++; }; }); if (sCount === 3) { str = `${sCount}S` } else if (bCount === 3) { str = `${bCount}B` } else { str = `${bCount}B${sCount}S` }; console.log(str); (randomNum !== inputNum) ? checkNum(randomNum, count) : console.log(`${count}번만에 맞히셨습니다.\n게임을 종료합니다.`);4. 답안 호출
answer()