본문 바로가기

알고리즘

프로그래머스 자바스크립트 알고리즘 스터디 [문1~문8]

728x90

문제1

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.


제한 조건

  • n과 m은 각각 1000 이하인 자연수입니다.

나의 코드)

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    let row = '*'.repeat(a)+'\n'
    let stars=row.repeat(b)
    console.log(stars)
});

나의 해설)

row를 변수로 설정한 뒤 반복문을 돌려서 푸는 풀이도 있지만, 줄 바꿈을 추가해 repeat를 한번 더 주는 형식으로 stars를 변수로 설정하고 최종적으로 stars를 출력한다.

 

 

문제2)

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.제한 조건

  • num은 int 범위의 정수입니다.
  • 0은 짝수입니다.

나의코드)

function solution(num) {
    var answer = '';
    if(num%2==0){
        answer='Even'
    }else{
        answer='Odd'
    }
    return answer;
}

나의 해설)

일단 num%2==0이라는 것은 "num을 2로 나누었을 떄의 나머지가 0이다"를 의미한다. 앞의 조건이 참이라면 answer값에 even을 할당하고 아니라면 odd를 할당하여 최종적으로 answer를 리턴한다

 

문제3

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.재한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

나의 코드)

function solution(s) {
    var answer = '';
    let a=s.length
  if(a%2==0){  
    answer=s[a/2-1]+s[a/2]
  }else{
    answer=s[Math.floor(a/2)]
  }
  console.log(answer)
    return answer;
}

solution('abcd')

나의 해설)

s.length 는 s에 배열이 들어왔을 때 배열의 길이를 의미한다. 배열의 개수가 짝수인지 홀수인지에 따라 반환되어야 할 문자열의 개수가 달라진다. 배열의 개수가 짝수일 경우(s.length%2==0)에는 s[s.length/2-1]+s[s.length/2]를 반환해야 

가운데 두 글자가 반환되고 홀수인 경우에는 s[math.floor(s.length/2)]를 해줘야 한다. 이 때 math.floor는 소수점을 반올림해주는 자바스크립트의 내장함수이다. s.length 자체가 홀수인 경우이기 떄문에 2로 나누어버리고 math.floor를 적용하지 않으면 s[소수점 숫자]가 들어가게 되고 배열에 0,1,2,3등이 들어가야 순차적으로 값이 나오기 때문에 s.length가 홀수이면 반드시 적용을 해주어야 한다.

 

문제4

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.제한 조건

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

나의코드)

function solution(a, b) {
    var answer = 0;

    if(a<=b){
      for(let i = a ; i <=b ; i++ ){
        answer = answer + i
      }    
    }
    if(a>b){
        for(let i = b; i <=a ; i++){
            answer =answer+i
        }
    }
    return answer;
}

나의 풀이)a와 b의 대소관계가 정해져있지 않기 때문에, if문으로 a<=b인 경우와 a>b인 경우로 나누어서 생각해본다. 

두 경우 모두에서 작은값을 초기값 큰 값을 최종값으로 세팅하고, i가 증가할 때 마다 answer값에 answer+i를 할당하여 최종적으로 작은값+(작은값+1)+(작은값+2)+....(큰값)이 answer에 할당될 수 있도록 한다. 

 

문제5)

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.제한 조건

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.

나의코드)

function solution(s) {
    var answer = 0;
    answer=Number(s)
    return answer;
}

나의풀이)

Number()는 문자열을 숫자로 바꾸어주는 자바스크립트내장함수이다.Number("1234")의 값은 1234가 된다.

 

문제6

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.

나의코드)

function solution(numbers) {
    var answer = 0;
    let arr=[1,2,3,4,5,6,7,8,9]
    let sum=0
    for(i=0;i<arr.length+1;i++){
        if(arr.includes(numbers[i])){
            sum=sum+numbers[i]
        }answer=45-sum;
    }return answer
}

나의해설)

일단 문제에서 주어진 1부터 9까지가 들어있는 arr를 하나 생성한다. for문은 초기값은 0 최종값은 arr.length+1로 했는데 문제에서 numbers의 값의 개수가 arr의 배열의 길이보다 같거나 적기 때문에 안에 numbers.length를 넣어줘도 무방하다. includes는 배열이 특정 배열의 값을 포함하고 있는지의 여부이다. arr.includes(numbers[i])는 arr가 numbers[i]를 포함하고 있으면 true를 반환한다. 그리고 sum=sum+numbers[i]로 설정하여 numbers에 들어간 값들의 합들이 sum에 저장되게 된다. 1부터 9까지의 값을 모두 더하면 45이고, answer는 45에서 sum 값을 뺀 값이 된다.

 

문제7

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

나의 코드)

function solution(absolutes, signs) {
    var answer = 0;
    for(let i=0;i<absolutes.length;i++){
        if(signs[i]==true){
            answer=answer+absolutes[i];
        }else{
            answer=answer-absolutes[i];
        }
    }return answer;

}

나의 해설)

친절하게도 조건에서 boolean값을 sign값으로 전달해주고 있다. true이면 양수이기 때문에 값을 그대로 더해주면 되고 음수인 경우에는 앞에 -를 붙이면 양수로 변환되어 저장할 수 있다.

 

문제8)

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

제한사항

  • arr은 길이 1 이상, 100 이하인 배열입니다.
  • arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

나의코드)

function solution(arr) {
    var answer = 0;
    let sum=0;
    for(i=0;i<arr.length;i++){
        sum=sum+arr[i]; 
    }
    return answer=sum/arr.length;
}

나의해설)

일단 sum값에 배열의 모든 값들이 다 저장될 수 있도록 반복문을 돌린다음에 배열의 길이만큼으로 나누어주면 평균을 구할 수 있다

 

 

 

]

728x90