문제

 

풀이 코드

func solution(_ x:Int, _ n:Int) -> [Int] {
    var listArray: [Int] = [x];
    for _ in 0..<n-1 {
        listArray.append(listArray.last! + x)
    }
    return listArray
}

 

풀이 과정

for 반복문을 이용하여 x 만큼 계속 더해주었고,

Array.last 를 이용하여 마지막 값에 누적 합산 해 주었다!

 

다른사람의 풀이

func solution(_ x:Int, _ n:Int) -> [Int64] {
    return Array(1...n).map { Int64($0 * x) }
}

고차함수를 생각하자!!

map 이라는 메서드가 있다!

swift는 이제 막 공부를 다시 시작한거라 문법을 좀 익힐 필요가 있을 것 같다

문제

 

풀이 코드

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()
}

문제

 

풀이 코드

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