문제

 

풀이 코드

import Foundation

let n = readLine()!.components(separatedBy: [" "]).map { Int($0)! }
let (a, b) = (n[0], n[1])

for _ in 0..<b {
    for _ in 0..<a{
        print("*",terminator: "")
    }
    print()
}

어제는 1일 1커밋을 지키지 못했다.

 

우선 1년정도 앓고있던 지병때문에 또 수술하러 병원에 갔다.

그리고 수술하고 집에오니 집에 강아지가 있었다.

어머니께서 새로이 분양받은 콩이였다.

 

그렇게 콩이를 집에 적응시키던 와중에 메일이 도착했다.

무슨 메일이지? 하며 열어봤다.

 

최종 합격 이라는 문구만 눈에 들어왔다.

 

순간 나는 " 아, 맞다 오늘 합격자 발표날이였지! "

하며 합격메일을 확인했다,

 

메일 확인전 붙었는지 떨어졌는지 간쫄리며 봤어야 했는데,

 

어제는 너무 정신이 없었다

 

아침부터 수술하고 오후에 집에오니 강아지가 있었고

강아지를 돌보느라 시간가는줄 몰라서;;

 

아무튼 합격해서 너무나도 기쁘다 이제 앞으로 계획을 바꿔야할 시간이다.

 

프론트엔드 공부는,, 잠시 접어두고,,

다시 iOS로,

문제

 

풀이 코드

const calcuGCD = (n, m) => {
  return n % m == 0 ? m : calcuGCD(m, n % m);
};

function solution(arr) {
  let gcd = calcuGCD(arr[0], arr[1]);
  let lcm = (arr[0] * arr[1]) / gcd;

  for (let i = 2; i < arr.length; i++) {
    gcd = calcuGCD(lcm, arr[i]);
    lcm = (lcm * arr[i]) / gcd;
  }
  return lcm;
}

 

풀이 과정

여러 수의 최소공배수를 구하는 방법은 다음과 같다.

 

1. A 와 B 의 최소공배수를 구한다.

2. 1의 최소공배수와 C의 최소공배수를 구한다.

3. 2의 최소공배수와 D의 최소공배수를 구한다.

4 ... 반복한다

 

이렇게 하면 N개 수의 최소공배수를 구할수 있다.

 

최소 공배수를 구하기 위하여 

유클리드 호제법을 이용한 최대 공약수 계산 함수를 생성하고,

 

인덱스 0 과 1 의 최소공배수를 우선 구한후,

다음 인덱스의 수들과 의 최소공배수를 구하도록 하였다.

 

다른사람의 풀이

function nlcm(num) {
 return num.reduce((a,b) => a*b / gcd(a,b))  
}

function gcd(a, b) {
  return a % b ? gcd(b, a%b) : b
}

할말을 잃었다.

풀이가 너무 간단하게 나왔다

문제

 

풀이 코드

function solution(A,B){
    let a = A.sort((a,b) => a - b);
    let b = B.sort((a,b) => a - b).reverse();
    let sum = 0;
    
    for (let i = 0; i < a.length; i++) {
        sum = sum + (a[i] * b[i]);
    }
    return sum;
}

 

풀이 과정

우선, A 배열과 B 배열을 모두 정렬하되, 

A배열은 오름차순, B 배열은 내림차순으로 정렬 하였다,

 

이렇게 한 이유는 문제에서 각 요소의 곱을 모두 더하여 최솟값을 만드는 문제였다,

따라서 하나의 배열내의 최대값과,  또 다른 배열내의 최소값을 곱해 모두 더하면 그게 최소값이 될것이다.

 

이렇게 정렬한 후, for 루프를 통해 각 요소의 곱을 sum 변수에 누적 합산 하였다.

 

다른사람의 풀이

function solution(A,B){
    A.sort((a, b) => a - b)
    B.sort((a, b) => b - a)
    return A.reduce((total, val, idx) => total + val * B[idx], 0)
}

풀이 방법이 비슷하지만 reduce 라는 내장함수를 사용하셨다

문제

 

풀이 코드

function solution(s) {
    return s.split(" ").map(item => {
        if(item !== '')
            return item[0].toUpperCase() + item.substr(1).toLowerCase()
    }).join(" ")
}

 

풀이 과정

문자열을 공백 기준으로 우선 나누고, map 메서드를 통해 해당 인덱스가 공백이 아닌경우 ( ' ' 으로만 나누어진 경우가 이에 해당 )

해당 인덱스의 요소의 첫 문자만 대문자로 치환하고, 이후의 문자들을 붙여 반환하였다, 마지막으로 join 을 통해 나누어진 배열을 다시 하나의 문자열로 구성하였다.

 

처음 문제를 풀때 오류가 발생했는데 원인이 바로 공백으로만 나누어진 경우였다.

따라서 if 구절을 통해 공백이 아닌 경우에만 계산하도록 작성하였다

 

다른사람의 풀이

function solution(s) {
    return s.split(" ").map(v => v.charAt(0).toUpperCase() + v.substring(1).toLowerCase()).join(" ");
}

if 구문없이 charAt 을 이용하여 접근하셨다.

+ Recent posts