[TIL] Today I Learned : 코드카타 Day1 & 프로그래머스 직사각형 별찍기
오늘은 코드카타를 한 첫날이다.
코딩테스트를 준비해야지 하고 있었는데 제대로 사기를 돋아준 것 같다....
문제는 어찌어찌 풀었는데 푼 것 같지 않은 이 느낌.....
코딩테스트 문제를 많이 풀어봐야겠다고 뼈저리게 느끼고
프로그래머스에서 문제 하나를 또 풀었다.

코드카타 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 해주어야 한다.
안 그러면 ***************이렇게 붙어서 나온다.