아자아자 화이팅이닷 !

231204 엘리스 트랙 문제풀기 본문

TIL

231204 엘리스 트랙 문제풀기

유초23 2023. 12. 5. 00:07
728x90

* JS에서 parseInt()는 문자를 숫자로 변환해주는 함수 ! > 까먹었다리 ㅋ.ㅋ ..


* break와 continue의 차이가 잠깐 헷갈려서 검색 !

 

https://likedev.tistory.com/entry/Javascript-%EB%B0%98%EB%B3%B5%EB%AC%B8-break-continue-%EC%B0%A8%EC%9D%B4

 

[Javascript] 반복문 break, continue 차이

break와 continue는 모두 반복문에서 사용되는 제어문입니다. 하지만 두 문장은 서로 다른 역할을 수행합니다. break 문은 반복문을 즉시 탈출하고 반복문 바로 뒤의 문장으로 제어를 이동시킵니다.

likedev.tistory.com


* 배수 판별기 문제에서

 

나는

function solution(num) {
  var answer = [];
  while(num >= 2) {
      if (num % 2== 0) {
          answer.push("2의 배수입니다.");
          num /= 2;
      }
      else if (num % 3== 0) {
          answer.push("3의 배수입니다.");
          num /= 3;
      }
      if (num % 5== 0) {
          answer.push("5의 배수입니다.");
          num /= 5;
      }
      if (num % 7== 0) {
          answer.push("7의 배수입니다.");
          num /= 7;
      }
  }
  answer = [...new Set(answer)];
  return answer.join("\n");
}

 

이렇게 코드를 짰고,

여기에서 중복제거에 대한 참고링크는 아래와 같다.

 

https://sisiblog.tistory.com/313

 

[javascript] 자바스크립트 배열 중복 제거

참고: https://www.javascripttutorial.net/array/javascript-remove-duplicates-from-array/ 이 포스트에서는 JavaScript의 배열에서 중복된 항목을 제거하는 방법을 알아보겠습니다. 1. Set를 사용하여 배열에서 중복 제거

sisiblog.tistory.com

 

https://blacklobster.tistory.com/14

 

간단간단! 자바스크립트(JS) 문자열, 배열 중복값 제거하기

이전 글에서는 자바스크립트(JavaScript)의 문자열과 배열의 중복값 찾기를 알아보았는데요. 이번에는 중복값을 제거하는 방법에 대해 알아보겠습니다. 즉 최종적으로 제거한 값만 남는 것이죠.

blacklobster.tistory.com

 

그런데 코드가 돌아가는 시간이 너무 오래걸려 코드를 수정해야했다.

 

자바스크립트에서는 문자열과 변수를 같이 사용할때 백틱(`)과 ${}를 쓴다는것을 알게 되었다 !

 

https://novlog.tistory.com/entry/JavaScript-%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%A6%AC%ED%84%B0%EB%9F%B4-%EB%B0%B1%ED%8B%B1-%EB%8B%AC%EB%9F%AC-%EB%AC%B8%EB%B2%95-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[JavaScript] 템플릿 리터럴 : 백틱(``) 달러(${}) 문법 사용법

*개인적인 공부 내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다. *지속적으로 내용을 수정해 나갈 예정입니다. 혹여나 잘못된 내용이 있다면 언제든지 지적

novlog.tistory.com

 

요렇게 말이다 !

 

그래서 최종 코드는

function solution(num) {
  const factors = [2,3,5,7];
  const answer = [];

  for (const factor of factors) {
      if (num % factor == 0) {
          answer.push(`${factor}의 배수입니다.`);
          num /= factor;
      }
  }
  return answer.join("\n");
}

 

이렇게 짜면 된다 ,,!


* 자바스크립트에서 배열의 인덱스를 알고싶을때는 arr.indexOf("웩") 이런식으로 indexOf함수를 쓰면 된다 !


* 마천루 문제에서는

 

음 .....

처음에

function solution(input) {
  var answer = "";
  for (var i = 1; i <= input; i++) {
    if(i < 5) {
        answer += "*".repeat(i) + "\n";
    }
    else {
        answer += "*".repeat(5) + "\n";
    }
  }
  return answer;
}

 

이렇게 코드를 짰는데 돌아가지 않았다 ,,

 

그래서

function solution(input) {
  var answer = [];
  for (var i = 1; i <= input; i++) {
    if(i < 5) {
        answer.push("*".repeat(i));
    }
    else {
        answer.push("*".repeat(5));
    }
  }
  return answer.join("\n");
}

 

이렇게 코드를 수정했더니 테스트를 통과하였다 ,,

뭐가 문제였을까 .. 완조니 OMG

 

그리고 자바스크립트에서는 "*" * 5 이런식으로 사용하지 않고 repeat()함수를 사용한다는것을 알았다 !

 

더 간결하게는

function solution(input) {
    var answer = [];
    for (var i=1; i<=input; i++) {
        var count = Math.min(i,5);
        answer.push("*".repeat(count));
    }
    return answer.join("\n");
}

 

이렇게 코드를 짤 수 있다 !

굉장히 센스가 있게 짠 코드라고 생각한다 !


* 그리고 자바스크립트에서는 str[-1] 같이 마지막 인덱스의 값을 가지고 오는 동작이 실행되지 않는다 !


* 커피전문점 문제에서는

 

function solution(input) {
  var count = 0;
  for(var i=0; i<input.length; i++) {
      if (input[i].includes("아메리카노")) {
        count += 4100;
      }
      else if (input[i].includes("카페라떼")) {
        count += 4600;
      }
      else if (input[i].includes("카라멜마끼아또")) {
        count += 5100;
      }
  }
  return count;
}

 

이렇게 코드를 짰는데,

 

const menu = {
    "아메리카노" : 4100,
    "카페라떼" : 4600,
    "카라멜마끼아또" : 5100
};
function solution(input) {
    count = 0;
    for (i=0; i< input.length; i++) {
        const drink = input[i];
        count += menu[drink];
    }
    return count;
}

 

이렇게 코드를 짜주는 방법도 있다 !


* 반쪽짜리 피라미드 문제에서는

 

function solution(num) {
  star = [];
  for (var i = num-1; i >= 0; i--) {
          star.push(" ".repeat(i));
          star.push("*".repeat(num-i));
          star.join("\n");
      }
  return star;
}

 

이렇게 했을때 원하는 결과가 안나와서 힌트를 얻어

 

function solution(num) {
  let star = [];
  for (let i = num-1; i >= 0; i--) {
          star.push(" ".repeat(i) + "*".repeat(num-i));
      }
  return star.join("\n");
}

 

이렇게 해결하였다 ,,

뭔가 하나씩 포인트를 놓치는 것 같아 아쉽 !


* 겹치는 구간 찾기 문제에서

 

function solution(input) {
  result = [];
  num = input.split("\n");
  if (num[1] < num[2] || num[3] < num[0]) {
      return "X";
  }
  else {
    while (result.length <2) {
        if (num[0] <= num[2]) {
            result.push(parseInt(num[2]));
        }
        else if (num[0] > num[2]){
            result.push(parseInt(num[0]));
        }
        else if (num[1] <= num[3]){
            result.push(parseInt(num[1]));
        }
        else {
            result.push(parseInt(num[3]));
        }
    }
  }
  return result;
}

 

이런식으로 코드를 짰었는데 이건 아니다 싶어서

도움을 얻어 다시 짬 !

 

function solution(input) {
  const [aMin,aMax,bMin,bMax] = input.split("\n").map(Number);

  if (aMax < bMin || bMax < aMin) {
      return "X";
  }
  else {
      const numMin = Math.max(aMin,bMin);
      const numMax = Math.min(aMax,bMax);
      return [numMin,numMax];
  }
}

 

이렇게 해주면 엄청 간단하게 해결할 수 있었돠 ..


* 8은 특별해! 문제에서는

 

처음에

function solution() {
  result = [];
  for (i=0; i<10000; i+) {
      if(toString(i).includes("8")) {
          result.push(toString(i));
      }
    }
  return result.length;
}

 

이렇게 풀었는데 답이 안나와서 힌트를 얻어

 


* 암호문 해석하기 문제에서

 

처음에

var signal1 = {'a': 'n', 'b': 'd', 'c': 'a', 'd': 'b', 'e': 'e', 'f': 'l', 'g': 'j', 'h': 'o', 'i': 'z', 'j': 'u', 'k': 'y', 'l': 'v', 'm': 'w', 'n': 'q', 'o': 'x', 'p': 'r', 'q': 'p', 'r': 'f', 's': 'g', 't': 't', 'u': 'm', 'v': 'h', 'w': 'i', 'x': 'c', 'y': 'k', 'z': 's'}

var signal2 = {'a': 'z', 'b': 'y', 'c': 'x', 'd': 'w', 'e': 'v', 'f': 'u', 'g': 't', 'h': 's', 'i': 'r', 'j': 'q', 'k': 'p', 'l': 'o', 'm': 'n', 'n': 'm', 'o': 'l', 'p': 'k', 'q': 'j', 'r': 'i', 's': 'h', 't': 'g', 'u': 'f', 'v': 'e', 'w': 'd', 'x': 'c', 'y': 'b', 'z': 'a'}

// 지시사항을 참고하여 solution 함수 안에 코드를 작성하세요.
function solution(code) {
  result = [];
  console.log(code);
  var fnum, sstr = code.split(" ");
  for (i=0; i<fnum.length; i++) {
      if (i == 0) {
          result.push(signal1[sstr]);
      }
      else {
          result.push(signal2[sstr]);
      }
  }
  return result;
}

 

이렇게 코드를 짰는데 답이 안나와서 헬프 요청 ,,

 

var signal1 = {'a': 'n', 'b': 'd', 'c': 'a', 'd': 'b', 'e': 'e', 'f': 'l', 'g': 'j', 'h': 'o', 'i': 'z', 'j': 'u', 'k': 'y', 'l': 'v', 'm': 'w', 'n': 'q', 'o': 'x', 'p': 'r', 'q': 'p', 'r': 'f', 's': 'g', 't': 't', 'u': 'm', 'v': 'h', 'w': 'i', 'x': 'c', 'y': 'k', 'z': 's'}

var signal2 = {'a': 'z', 'b': 'y', 'c': 'x', 'd': 'w', 'e': 'v', 'f': 'u', 'g': 't', 'h': 's', 'i': 'r', 'j': 'q', 'k': 'p', 'l': 'o', 'm': 'n', 'n': 'm', 'o': 'l', 'p': 'k', 'q': 'j', 'r': 'i', 's': 'h', 't': 'g', 'u': 'f', 'v': 'e', 'w': 'd', 'x': 'c', 'y': 'b', 'z': 'a'}

// 지시사항을 참고하여 solution 함수 안에 코드를 작성하세요.
function solution(code) {
  result = [];
  console.log(code);
  var [fnum, sstr] = code.split(" ");
  for (i=0; i<fnum.length; i++) {
      if (fnum[i] == 0) {
          result.push(signal1[sstr[i]]);
      }
      else {
          result.push(signal2[sstr[i]]);
      }
  }
  return result.join("");
}

 

fnum과 sstr을 그냥 배열에 넣어버리고

중간에 i번째라는거 잘 넣어주고

마지막에 join함수 넣어줘야함 ,,

 

지금 좀 머리가 안돌아가는듯 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅠ

안쉬고 풀어서 그런것 같지만 쉴수 없다 ..


* 자바스크립트에서 소문자로 변경해주는 함수는 toLowerCase()이다.


* 문자의 빈도 조사하기 문제에서는 

 

힌트를 얻어

function solution(str) {
  str = str.toLowerCase();
  alpha_cnt = {};
  for (i = 0; i < str.length; i++) {
    if (str[i] !== '  ') {
      if (alpha_cnt[str[i]]) {
        alpha_cnt[str[i]]++;
      } else {
        alpha_cnt[str[i]] = 1;
      }
    }
  }
  return alpha_cnt;
}

 

이렇게 해결할 수 있었다,,

저 공백을 주의 !


일단 잘 못풀었던거 위주로 정리는 해봤는데 진짜 너무 정신없다 ;;;;

일단은 시험 화이팅이다

728x90