Skip to content

Conversation

@4BFC
Copy link
Member

@4BFC 4BFC commented Nov 24, 2024

#️⃣ Number

  • 169586
  • LV.1

🏆정답여부

  • 정답

🌐문제 링크

🔗 169586

참고자료
🔗 1931 참고자료
🔗 1931 O(n^2)
🔗 Js Infinity 문법

🔐풀이 과정

🔥Point
주어진 매개변수를 최대한 활용해서 indexOf문법을 사용해서 targets의 위치 값을 keymap 어디에 위치해 있는지 확인하는 코드를 구현하려고 했다. 여기서 js문법 Infinity를 활용했는데 아래 구체적 풀이 방법에서 설명을 이어 하겠다. 해당 문제는 다시 풀어보다 좋은 문제로 다시 풀어보기 적합하다 판단된다.

📌Description

  • js문법 Infinity

    • infinity란 자바스크립트에서 정의된 전역 값으로 수학적으로 무한대를 나타낸다. Infinity는 모든 숫자보다 크기 때문에 최소값을 구할 때 초기값으로 설정하기 적합하다. 해당 코드는 단독으로 사용되기보다. Math함수와 함께 사용되면 최고의 결과를 도출할 수 있다. 사용예시는 아래와 같다.
      let min = Infinity; // 가장 큰 값으로 초기화
      let values = [10, 3, 7];
      for (let val of values) {
          min = Math.min(min, val); // 배열 내 최소값을 구함
      }
      console.log(min); // 출력: 3
    
    따라서 코드를 보면 Math.min함수를 사용하는데 Math.min은 전달받은 숫자들 중 가장 작은 값을 반환하는 함수이며 minPress가 가장 큰 값으로 초기값으로 최대값의 역할을 한다. 그리고 min함수에서 minPress값과 index+1을 하는 이유는 누르는 값을 의미하기에 0부터가 아닌 1부터 계산되어야하기 때문에 index+1을 해주는 것이다.
  • count의 위치와 초기값 할당

    • count를 전역으로 둔다면 count가 keymap의 index 0~N의 count값을 계속해서 이어 계산을 하기 때문에 첫번째 for문인 targets의 배열을 나눠 계산하는 루프에서 count가 지속적으로 0인 초기 값을 가져야한다.
  • minPress === Infinity의 조건문

    • keymap[k].indexOf(targets[i][j])가 모든 keymap 배열 요소에서 -1을 반환한다면, minPress는 업데이트되지 않고 Infinity 상태로 유지된다. -1을 반환하는 이유는 해당 문자가 지정된 keymap에 찾는 값이 없어서 발생된다.
  • 삼중 for문의 시간복잡도(O(n^3))

    • 현재 코드에서 사용된 for 루프의 중첩은 다음과 같다.
      • 첫 번째 루프: targets 배열 크기만큼 실행 → O(n)
      • 두 번째 루프: 각 targets[i]의 문자열 길이만큼 실행 → O(m)
      • 세 번째 루프: keymap 배열 크기만큼 실행 → O(k)
    • 따라서 전체 시간 복잡도는 O(n * m * k)이다.
      • n: targets 배열의 길이
      • m: 각 targets[i]의 문자열 길이
      • k: keymap 배열의 길이
    • 이러한 복작도를 해결하기 위해서는 js의 Dictionary 형태로 O(n^2)을 만들어 낼 수 있다. 문제를 풀어내면서도 해당 문제는 Dictionary로 문제를 풀어내길 기대한 것 같다고 파악된다.

🔔Notice

  • 🔄 #다시 풀어볼 issue 번호

@4BFC 4BFC added javascript javascript retry retry labels Nov 24, 2024
@4BFC 4BFC added this to the 🕊Programmers milestone Nov 24, 2024
@4BFC 4BFC self-assigned this Nov 24, 2024
@4BFC 4BFC linked an issue Nov 24, 2024 that may be closed by this pull request
@4BFC 4BFC merged commit 4fa507a into main Mar 9, 2025
@4BFC 4BFC deleted the programmers/169586 branch March 9, 2025 11:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

javascript javascript retry retry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Math.를 통해 반올림과 내림을 학습한다.

2 participants