Coding Test/Codility

2. λ°°μ—΄ (Arrays) Codility Lesson ν•œκ΅­μ–΄ 정리본 (JavaScript ver.)

chamroro 2025. 3. 1. 21:50

λ°°μ—΄ (Arrays)

λ°°μ—΄(Array)은 μ—¬λŸ¬ 개의 ν•­λͺ©μ„ ν•œ 곳에 μ €μž₯ν•  수 μžˆλŠ” 데이터 ꡬ쑰이닀. 예λ₯Ό λ“€μ–΄, μ‡Όν•‘ λͺ©λ‘μ„ μƒκ°ν•΄λ³΄μž. 각각의 μ œν’ˆμ„ κ°œλ³„μ μΈ νŽ˜μ΄μ§€μ— κΈ°λ‘ν•˜μ§€ μ•Šκ³ , ν•œ νŽ˜μ΄μ§€μ— λ‚˜μ—΄ν•˜λŠ” 것이 더 νš¨μœ¨μ μ΄λ‹€. 배열은 μ΄λŸ¬ν•œ κ°œλ…κ³Ό μœ μ‚¬ν•˜λ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ, 1λ…„ λ™μ•ˆμ˜ 일일 κΈ°μ˜¨μ„ κΈ°λ‘ν•˜λ € ν•œλ‹€λ©΄, 365개의 λ³€μˆ˜λ₯Ό λ§Œλ“€κΈ°λ³΄λ‹€λŠ” ν•˜λ‚˜μ˜ 배열에 μ €μž₯ν•˜λŠ” 것이 더 μ μ ˆν•˜λ‹€.


1. λ°°μ—΄ 생성 (Creating an Array)

μš°λ¦¬λŠ” μ„Έ 개의 μ œν’ˆμ„ ν¬ν•¨ν•˜λŠ” μ‡Όν•‘ λͺ©λ‘μ„ λ§Œλ“€κ³ μž ν•œλ‹€. μ΄λŸ¬ν•œ 배열은 λ‹€μŒκ³Ό 같이 생성할 수 μžˆλ‹€.

JavaScript μ½”λ“œ:

let shopping = ['bread', 'butter', 'cheese'];

λ°°μ—΄μ˜ 각 ν•­λͺ©μ„ μš”μ†Œ(element) 라고 ν•œλ‹€. 배열은 λ©”λͺ¨λ¦¬ μš©λŸ‰μ΄ ν—ˆμš©ν•˜λŠ” ν•œ μ–Όλ§ˆλ“ μ§€ λ§Žμ€ μš”μ†Œλ₯Ό μ €μž₯ν•  수 있으며, λΉ„μ–΄μžˆλŠ” 배열도 λ§Œλ“€ 수 μžˆλ‹€.

let shopping = [];

λ§Œμ•½ 365일 λ™μ•ˆμ˜ κΈ°μ˜¨μ„ μ €μž₯ν•˜λ €λ©΄, μ΄ˆκΈ°κ°’μ„ 0으둜 μ„€μ •ν•˜μ—¬ 배열을 생성할 수 μžˆλ‹€.

let temperatures = new Array(365).fill(0);

2. λ°°μ—΄ μš”μ†Œ μ ‘κ·Ό (Accessing Array Values)

배열은 λͺ¨λ“  μš”μ†Œμ— μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€. 각 μš”μ†ŒλŠ” 인덱슀(index) 라고 λΆˆλ¦¬λŠ” 번호λ₯Ό κ°€μ§€λ©°, μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” 연속적인 μ •μˆ˜μ΄λ‹€.

예λ₯Ό λ“€μ–΄, λ‹€μŒ 배열을 보자.

let shopping = ['bread', 'butter', 'cheese'];
  • shopping[0] → 'bread'
  • shopping[1] → 'butter'
  • shopping[2] → 'cheese'

λ°°μ—΄μ˜ νŠΉμ • μœ„μΉ˜μ˜ 값을 ν™•μΈν•˜λ €λ©΄ λŒ€κ΄„ν˜Έ([])λ₯Ό μ‚¬μš©ν•˜μ—¬ μ ‘κ·Όν•  수 μžˆλ‹€.

console.log(shopping[1]); // 'butter'

3. λ°°μ—΄ κ°’ μˆ˜μ • (Modifying Array Values)

λ°°μ—΄ μš”μ†ŒλŠ” κ°œλ³„ λ³€μˆ˜μ²˜λŸΌ 값을 λ³€κ²½ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 42번째 λ‚ μ˜ 기온이 25λ„μ˜€μŒμ„ κΈ°λ‘ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 ν•˜λ©΄ λœλ‹€.

temperatures[42] = 25;

μ‡Όν•‘ λͺ©λ‘μ— μƒˆλ‘œμš΄ μ œν’ˆμ„ μΆ”κ°€ν•˜λ €λ©΄ push λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

shopping.push('eggs');

λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μΈλ±μŠ€μ— μƒˆλ‘œμš΄ μš”μ†Œκ°€ μΆ”κ°€λœλ‹€.


4. λ°°μ—΄ 반볡문 (Iterating Over an Array)

λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό λ°˜λ³΅ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. 예λ₯Ό λ“€μ–΄, μ‡Όν•‘ λͺ©λ‘μ— λͺ‡ 개의 ν•­λͺ©μ΄ μžˆλŠ”μ§€ μ„Έλ €λ©΄ length 속성을 μ‚¬μš©ν•  수 μžˆλ‹€.

let N = shopping.length;
console.log(N); // 3

예제: 음수 κΈ°μ˜¨μ„ κΈ°λ‘ν•œ λ‚  수 μ„ΈκΈ°

JavaScript μ½”λ“œ:

function countNegativeTemperatures(temperatures) {
    let days = 0;
    for (let temp of temperatures) {
        if (temp < 0) {
            days++;
        }
    }
    return days;
}

이 ν•¨μˆ˜λŠ” λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό μˆœνšŒν•˜λ©° 음수 κΈ°μ˜¨μ„ κΈ°λ‘ν•œ λ‚  수λ₯Ό μ„Έμ–΄ λ°˜ν™˜ν•œλ‹€.


5. κΈ°λ³Έ λ°°μ—΄ μ—°μ‚° (Basic Array Operations)

λ°°μ—΄μ—λŠ” λͺ‡ κ°€μ§€ 기본적인 연산이 μ œκ³΅λœλ‹€.

  • λ°°μ—΄ 길이: length
    console.log([1, 2, 3].length); // 3
    
  • λ°°μ—΄ 반볡: λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ—¬λŸ¬ 번 λ°˜λ³΅ν•  수 μžˆλ‹€.
    console.log(Array(3).fill('Hello')); // ['Hello', 'Hello', 'Hello']
    
  • λ°°μ—΄ μ—°κ²°: 두 개의 배열을 ν•©μΉ  수 μžˆλ‹€.
    console.log([1, 2, 3].concat([4, 5, 6])); // [1, 2, 3, 4, 5, 6]
    
  • λ°°μ—΄ 포함 μ—¬λΆ€ 확인: νŠΉμ • μš”μ†Œκ°€ 배열에 μ‘΄μž¬ν•˜λŠ”μ§€ 확인할 수 μžˆλ‹€.
    console.log(['bread', 'butter', 'cheese'].includes('butter')); // true
    

6. λ°°μ—΄ λ’€μ§‘κΈ° (Reversing an Array)

λ°°μ—΄ Aκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, ν•΄λ‹Ή 배열을 λ’€μ§‘λŠ” 문제λ₯Ό ν•΄κ²°ν•΄λ³΄μž.

JavaScript μ½”λ“œ:

function reverseArray(A) {
    let N = A.length;
    for (let i = 0; i < Math.floor(N / 2); i++) {
        let k = N - i - 1;
        [A[i], A[k]] = [A[k], A[i]];
    }
    return A;
}

JavaScriptμ—μ„œλŠ” λ‚΄μž₯ λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ 더 κ°„λ‹¨ν•˜κ²Œ 뒀집을 μˆ˜λ„ μžˆλ‹€.

A.reverse();

 

λ°˜μ‘ν˜•