문제

 

풀이 코드

function solution(x, n) {
  var answer = [x];
  for (let i = 0; i < n - 1; i++) {
    answer.push(answer[answer.length - 1] + x);
  }
  return answer;
}

 

풀이 과정

배열 초기 값을 입력들어온 x 하나만 넣고

배열의 push 함수를 사용하여 배열의 요소를 계속 추가해 주었다.

 

추가 하는 방식은, 배열의 마지막 요소를 기준으로 x 값을 계속 더해주면서 추가했다!

 

다른 풀이과정에서 fill 과 map 을 사용한 풀이도 있었지만, 내가 푼 방식으로도 충분하다는 생각이 들었다.

문제

 

풀이 코드

process.stdin.setEncoding('utf8');
process.stdin.on('data', (data) => {
  const n = data.split(' ');
  const a = Number(n[0]),
    b = Number(n[1]);
  writeStar(a, b);
});

function writeStar(a, b) {
  let starCount = '';
  for (let i = 0; i < a; i++) {
    starCount += '*';
  }

  for (let i = 0; i < b; i++) {
    console.log(starCount);
  }
}

 

풀이 과정

starCount 라는 변수에 for 반복문을 사용하여 * 을 a 입력만큼 저장 하였고,

b 만큼 starCount 를 출력했다.

 

풀면서도 너무 비효율적인거 같아 고민하다가 다른사람의 풀이를 보았다.

 

다른사람의 풀이

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

 

기초가 중요한 이유가 여기있다

 

for 를 남발하지 않고도 간략하게 repeat 함수를 이용하여 구현 할 수 있는 문제였다.

 

오늘은 repeat 함수에 대하여 공부해 봐야겠다!

문제

 

풀이 코드

function solution(num) {
  return num % 2 == 0 ? 'Even' : 'Odd';
}

 

풀이 과정

삼항 연산자를 이용하여 한줄의 코드로 표현할 수 있다

문제

 

풀이 코드

function solution(numbers) {
    var answer = -1;
    const MAX_NUM = 9;
    let sum = 0;
    
    for (let i = 0 ; i <= MAX_NUM; i++) {
        sum += i;
    }
    
    let numbers_sum = numbers.reduce((total, current) => total + current, 0);
    answer = sum - numbers_sum; 
    return answer;
}

 

풀이 과정

1. 문제에서 요구사항을 보고 reduce 함수를 사용 하면 될 것 같았다. reduce 함수로 들어온 배열의 모든값을 더하고, 

0 ~ 9 까지의 합에서 해당 값을 빼면 된다고 생각했다!

 

너무 간단한 문제지만
고차 함수인 reduce 를 모르면 코드가 훨씬 길어졌을 것이다.

 

개발할때는 항상 모든 상황에 대한 경우의 수를 생각해야 한다고 했다.
간단하게 0~9 까지의 더한 값을 바로 사용하면 코드가 더 간결해 지겠지만...

숫자의 범위가 9 까지가 아니고, 10 , 100, 4000.. 등등 범위값이 달라지면 해당 코드를 다시 작성해야 하는 것 이 아닌,
MAX_NUM 상수의 값만 변경하면 바로 적용되도록 코드를 작성 하였다!

 

/*
 문제
 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
 
 입력
 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
 
 출력
 첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.
 
 */
import Foundation
let inputCount = readLine().map{Int($0)!}!
var inputNum = readLine()!.components(separatedBy: " ").map{Int($0)!}

if inputCount == 1 {
    print(inputNum[0]*inputNum[0])
} else {
    let even = (inputNum.count / 2)
    inputNum = inputNum.sorted()
    if inputNum.count % 2 == 0 {
        print(inputNum[even] * inputNum[even - 1])
    } else {
        print(inputNum[even - 1] * inputNum[even + 1])
    }
}

알고리즘 문제를 많이 풀어봐야 겠다고 느낀 문제..

 

문제를 보고 무슨뜻인지 잘 이해가 안되서 한참을 쳐다봤다 ㅋㅋㅋ

해당 풀이 방법은 이렇게 수행된다

 

1. 약수의 갯수가 1개이면 고민할 필요도 없이 해당 값을 제곱하여 출력하면 된다

2. 약수의 갯수가 2개 이상이라면 입력받은 배열을 정렬하고,[ 갯수 / 2 ] 를 하여 배열의 중간값위치를 구한다!

3. 약수의 갯수가 짝수 라면 중간값의 계산한 [ 인덱스의 값 * 이전 인덱스의 값 ] 을 하여 구한다!

4. 약수의 갯수가 홀수 라면 중간인덱스의 [ 이전 값 * 이후 값 ] 을 수행하여 구한다!

+ Recent posts