-
[TIL] Today I Learned : 코드카타 Day1 & 프로그래머스 직사각형 별찍기프론트엔드 개발자가 될거야./코딩테스트 2022. 7. 4. 23:25
오늘은 코드카타를 한 첫날이다.
코딩테스트를 준비해야지 하고 있었는데 제대로 사기를 돋아준 것 같다....
문제는 어찌어찌 풀었는데 푼 것 같지 않은 이 느낌.....
코딩테스트 문제를 많이 풀어봐야겠다고 뼈저리게 느끼고
프로그래머스에서 문제 하나를 또 풀었다.
코드카타 Day1
<문제>
twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
예를 들어,nums은 [4, 9, 11, 14] target은 13
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.
# 가정
target으로 보내는 합계의 조합은 배열 전체 중에 2개밖에 없다고 가정하겠습니다.<나의 방법>
const twoSum = (nums, target) => { for(let i = 0; i < nums.length; i++) { for(let j = 0; j < nums.length; j++) { if (i < j && (target === nums[i] + nums[j])) { return [i, j] } } } } console.log(twoSum([4, 9, 11, 14], 13))
이중 반복문을 사용했다.
그리고 i와 j가 겹치지 않게 하기 위해 i < j 조건을 넣어주었다.
i < j 이고 target === nums[i] + nums[j] 이면 원하는 값을 얻을 수 있다.
<다른 방법>
const twoSum = (nums, target) => { let answer = []; for(let i =0; i < nums.length; i++) { for(let j = 0; j < nums.length; j++) { if(nums[i]!== nums[j]) { if(nums[i] + nums[j] === target) { answer.push(i) } } } } return answer } console.log(twoSum([4, 9, 11, 14], 13))
비슷하지만 i와 j가 겹치지 않게 하기 위한 조건으로
nums[i]!== nums[j] 를 주었다.
그리고 또 if문을 사용했고
answer에 i를 넣어줬다.
지금 생각해보니
i와 j가 겹치지 않게 하기 위한 조건은
1. i < j
2. nums[i] !== nums[j]
3. i !== j이렇게 세 가지나 있다... wow..
프로그래머스 직사각형 별찍기
<방법 1>
process.stdin.setEncoding('utf8'); process.stdin.on('data', data => { const n = data.split(" "); // n = [5, 3] const a = Number(n[0]), b = Number(n[1]); // a = 5, b = 3 let out = ""; for(let i = 0; i < b; i++){ for(let j = 0; j < a; j++){ out = out + "*"; } out = out + "\n"; } console.log(out); });
a를 5번 반복하여 *****넣어준 후 \n로 줄 바꿈 해주고
이것을 b개수만큼 반복해주면 된다.
<방법 2>
process.stdin.setEncoding('utf8'); process.stdin.on('data', data => { const n = data.split(" "); // n = [5, 3] const a = Number(n[0]), b = Number(n[1]); // a = 5, b = 3 const row = '*'.repeat(a)// row = ***** for(let i =0; i < b; i++){ console.log(row) } });
repeat메서드를 쓰면 *를 원하는 만큼 반복할 수 있다.
<방법 3>
process.stdin.setEncoding('utf8'); process.stdin.on('data', data => { const n = data.split(" "); // n = [5,3] const a = Number(n[0]), b = Number(n[1]); // a = 5, b = 3 const star = `${'*'.repeat(a)}\n`; // star = *****\n console.log(star.repeat(b)); });
a처럼 b도 repeat 해줄 수도 있다. 단 ${'*'.repeat(a)} 에 \n 해주어야 한다.
안 그러면 ***************이렇게 붙어서 나온다.
'프론트엔드 개발자가 될거야. > 코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 삼총사 자바스크립트 (0) 2022.10.21 [코딩테스트] 프로그래머스 음양더하기 자바스크립트 (0) 2022.10.14 [코딩테스트] 프로그래머스 2016년 자바스크립트 (0) 2022.10.13 [코딩테스트] 프로그래머스 약수의 개수와 덧셈 자바스크립트 (0) 2022.10.11 [코딩테스트] 배열, 문자, 숫자 메서드 총정리 (0) 2022.10.11