IT/JavaScript & TypeScript

[JavaScript/알고리즘] FrogRiverOne

땅일단 2025. 1. 7. 01:17

Lesson 4 (Counting Elements) - FrogRiverOne(Easy)

 

Test results - Codility

A small frog wants to get to the other side of a river. The frog is initially located on one bank of the river (position 0) and wants to get to the opposite bank (position X+1). Leaves fall from a tree onto the surface of the river. You are given an array

app.codility.com

 

부끄러운 이야기지만 제 블로그니까 해봅니다.

처음에 영어로 된 문제 이해 못해서 18점 받았습니다.

이후 파파고 돌려서 문제를 이해하고 100점을 받았습니다...

 

X=4라면 1~4까지의 수열이 모두 적어도 한 번씩은 등장한 순간의 인덱스를 체크하면 되는 문제입니다.

function solution(X, A) {
    const ch = new Array(X + 1).fill(0);
    let cnt = 0;

    for (i in A) {
        if (ch[A[i]] === 0) {
            ch[A[i]] = 1;
            cnt++;
        }

        if (cnt === X) {
            return Number.parseInt(i);
        }
    }

    return -1;
}

 

간단한 문제지만 몇 가지 체크를 하고 갈 부분을 보자면...

 

  • 수열을 체크하는 부분은 1부터 시작하므로 맞춰주기 위해 X+1 크기의 빈 배열을 만들었습니다.
  • for in문은 원래 객체의 필드들을 탐색하는 구문이지만 자바스크립트에서 Array(배열)도 Object의 한 종류기 때문에 배열도 for in문을 사용 가능합니다.
const nums = [10, 20, 30];

const nums2 = {
  "0": 10,
  "1": 20,
  "2": 30,
  "length": 3
}

위 코드에서 nums는 사실 내부적으로 nums2와 동일한 형태라는 것입니다.

그래서 인덱스값인 i가 string으로 나온 것이고 제가 Number.parseInt() 메소드를 통해 숫자형으로 변환한 것을 확인하실 수 있겠습니다.

 

 


교훈: 영어도 중요하다