ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 해주어야 한다. 

    안 그러면 ***************이렇게 붙어서 나온다.

    댓글

Designed by Tistory.