https://school.programmers.co.kr/learn/courses/30/lessons/120921

 

문제 설명

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

 

제한사항

  • 0 < A의 길이 = B의 길이 < 100
  • A, B는 알파벳 소문자로 이루어져 있습니다.

 

pop(): 배열에서 마지막 요소를 제거하고, 그 요소를 반환한다.

unshift(): 새로운 요소를 배열의 맨 앞쪽에 추가하고, 새로운 길이를 반환한다.

function solution(A, B) {
    let arrA = [...A]
    
    for(i=1; i<arrA.length; i++) {
        if(A === B) {
            return 0
        } else {
            arrA.unshift(arrA.pop())
            
            if(arrA.join('') === B) {
                return i
            }
        }
    }
    
    return -1
}

https://school.programmers.co.kr/learn/courses/30/lessons/120956

 

문제 설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
  • 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

 

단어를 "aya", "ye", "woo", "ma"로 다 발음할 수 있어야 한다.
단어 중 일부만 발음할 수 있어도 발음할 수 있는 단어가 아니다.

function solution(babbling) {
    let words = []
    let answer = 0
    
    for(i=0; i<babbling.length; i++){
        words[i] = babbling[i].replace(/aya|ye|woo|ma/g, '')
        
        if(words[i] === '') {
            answer++
        }
    }
    
    return answer
}

https://school.programmers.co.kr/learn/courses/30/lessons/120924

 

문제 설명

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.

 

제한사항

  • 2 < common의 길이 < 1,000
  • -1,000 < common의 원소 < 2,000
  • common의 원소는 모두 정수입니다.
  • 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
  • 등비수열인 경우 공비는 0이 아닌 정수입니다.

 

등차수열(+): 연속하는 두 항의 차이가 모두 일정한 수열
등비수열(*): 각 항이 초항(첫번째 값)과 일정한 비를 가지는 수열

function solution(common) {
    const lastNum = Number(common.slice(-1))
    
    // 등차
    if(common[1] - common[0] === common[2] - common[1]) {
        return lastNum + (common[1] - common[0])
    }
    
    // 등비
    if(common[1] / common[0] === common[2] / common[1]) {
        return lastNum * (common[1] / common[0])
    }
}

https://school.programmers.co.kr/learn/courses/30/lessons/120866

 

문제 설명

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.


지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • board는 n * n 배열입니다.
  • 1 ≤ n ≤ 100
  • 지뢰는 1로 표시되어 있습니다.
  • board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.

 

새로운 2차원 배열을 만들어 지뢰와 위험지역을 모두 1로 표시한다.

0인 지역이 위험지역이 아니므로 0의 개수가 안전한 지역이다.

function solution(board) {
    // 위험 지역을 표시할 새로운 2차원 배열
    let dangerArr = Array.from(Array(board.length), () => Array(board.length).fill(0))
    const length = board.length
    
    for(i=0; i<length; i++) {
        for(j=0; j<length; j++) {            
            if(board[i][j] === 1) {
                dangerArr[i][j] = 1

                if(i > 0) {   
                    dangerArr[i-1][j-1] = 1
                    dangerArr[i-1][j] = 1
                    dangerArr[i-1][j+1] = 1   
                    
                    dangerArr[i][j-1] = 1
                    dangerArr[i][j] = 1
                    dangerArr[i][j+1] = 1  
                }
                
                if(i + 1 < length) {
                    dangerArr[i][j-1] = 1
                    dangerArr[i][j] = 1
                    dangerArr[i][j+1] = 1  
                    
                    dangerArr[i+1][j-1] = 1
                    dangerArr[i+1][j] = 1
                    dangerArr[i+1][j+1] = 1  
                }
            }
        }
    }
    
    // 안전지대 
    let safe = 0
    
    for(x=0; x<length; x++) {
        for(y=0; y<length; y++) {
            if(dangerArr[x][y] === 0) {
                safe++
            }
        }
    }
    
    return safe
}

https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

문제 설명

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

 

제한사항

  • 1 ≤ num ≤ 100
  • 0 ≤ total ≤ 1000
  • num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.

 

function solution(num, total) {
    let result = []
    
    // 가운데 값
    const avg = Math.ceil(total / num)

    // 가운데 값이 짝수인지 홀수인지에 따라서 시작 위치 구하기
    const x = Math.trunc(num / 2)

    // 시작 값
    const startNum = avg - x 

    for(i=0; i<num; i++){
        result.push(startNum + i)
    }
    
    return result
}

https://school.programmers.co.kr/learn/courses/30/lessons/12931

 

문제 설명

정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 0 ≤ n ≤ 1,000,000

 

function solution(n) {
    let arr = (Array.from(String(n))).map(Number)
    
    return arr.reduce((arr, cur) => arr + cur)
}

https://school.programmers.co.kr/learn/courses/30/lessons/120809

 

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • -10,000 ≤ numbers의 원소 ≤ 10,000
  • 1 ≤ numbers의 길이 ≤ 1,000

 

function solution(numbers) {
    return numbers.map(list => list * 2)
}

 

https://school.programmers.co.kr/learn/courses/30/lessons/120849

 

문제 설명

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

 

function solution(my_string) {
    const regex  = /a|e|i|o|u/g
    
    return my_string.replace(regex, '')
}

https://school.programmers.co.kr/learn/courses/30/lessons/120825

 

문제 설명

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

 

제한사항

  • 2 ≤ my_string 길이 ≤ 5
  • 2 ≤ n ≤ 10
  • "my_string"은 영어 대소문자로 이루어져 있습니다.

 

function solution(my_string, n) {
    let arr = [...my_string]
    let result = []
    
    for(i=0; i<arr.length; i++) {
        for(j=1; j<=n; j++) {
            result.push(arr[i])
        }
    }
    
    return result.join('')
}

https://school.programmers.co.kr/learn/courses/30/lessons/120903

 

문제 설명

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ s1, s2의 길이 ≤ 100
  • 1 ≤ s1, s2의 원소의 길이 ≤ 10
  • s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
  • s1과 s2는 각각 중복된 원소를 갖지 않습니다.

 

// map 사용
function solution(s1, s2) {
    let answer = 0
    
    s1.map(x => {
        s2.map(y => {
            if (x === y) {
                answer++
            }
        })
    })
    
    return answer
}
// for문 사용
function solution(s1, s2) {
    let answer = 0
    
    for(i = 0; i < s1.length; i++) {
        for(j = 0; j < s2.length; j++) {
            if(s1[i] === s2[j]) {
                answer++
            }
        }
    }
    
    return answer
}

+ Recent posts