✅ 1. 문자열 곱하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ my_string:String, _ k:Int) -> String {
    return String(repeating: my_string, count: k)
}

비슷한 문제가 있었는데, 함수형태로 바뀐것뿐이라서 String의 repeating을 사용하여 해결하였다.

 

✅ 2. 더 크게 합치기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🎃나의 풀이

var str1 = String(a)
    var str2 = String(b)
    
    var sam1 = Int(str1 + str2)!
    var sam2 = Int(str2 + str1)!
        
    return sam1 > sam2 ? sam1 : sam2

문자열과 정수형을 자유롭게 변환할 수 있는지 묻는 문제인 거 같았다.

의식의 흐름대로 작성된 나의 코드, 정답은 맞았지만 아마 더 줄일 수 있을 것 같은데...

 

🏆 모범 풀이

func solution(_ a:Int, _ b:Int) -> Int {
    return max(Int(String(a) + String(b))!, Int(String(b) + String(a))!)
}

max 함수를 사용하여 한줄로 표현이 가능했다.

 

✅ 3. 두 수의 연산값 비교하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ a:Int, _ b:Int) -> Int {
    return max(Int(String(a) + String(b))!, 2 * a * b)
}

max함수를 사용해 한줄로 마무리하였다~

 

✅ 4. n의 배수

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ num:Int, _ n:Int) -> Int {
    return num % n == 0 ? 1 : 0
}

삼항연산자와 %를 사용하여 간결하게 해결!

 

✅ 5. 공배수

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ number:Int, _ n:Int, _ m:Int) -> Int {
    return number % n == 0 && number % m == 0 ? 1 : 0
}

주어진 number를 n과 m으로 나누어져야 공배수로 볼 수 있으므로

삼항연산자, % , && 연산자를 사용 하여 간단하게 풀어주었다.

 

✅ 6. 홀짝에 따라 다른 값 반환하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ n:Int) -> Int {
    var result = 0
    // 짝수인 경우
    if(n % 2 == 0){
        for i in stride(from: 0, through: n, by: 2){
            result += i*i
        }
    }
    else{
        for i in stride(from: 1, through: n, by: 2){
            result += i
        }
    }
    return result
}

stride라는 함수를 알게 되었다. 직역을 해보니 '큰 걸음으로 걷다'였고, 보자마자 어떤 함수인지 알 수 있었다. ㅋㅋ

시작 숫자부터, 마지막 숫자까지 by만큼 건너 띄면서 세는 함수여서 이번 문제에 사용하기 적합하였다.

through과 to 두가지 선택지가 있는데 through은 '이하', to는 '미만'이다.

 

🏆 모범 풀이

func solution(_ n:Int) -> Int {
    if n % 2 == 0 { return stride(from: 2, through: n, by: 2).reduce(0) { $0 + $1 * $1 } }
    else { return stride(from: 1, through: n, by: 2).reduce(0, +) }
}

모범 풀이는 reduce라는 함수도 사용하여 더욱 간결하게 해결하였다.

reducemap과 비슷한 함수인데, 컬렉션을 하나의 단일 값으로 반환해준다.

반면 map은 컬렉션을 다른 배열로 반환하는 것에서 차이점이 있다.

 

✅ 7. 조건 문자열

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ ineq:String, _ eq:String, _ n:Int, _ m:Int) -> Int {
    if(ineq == "<" && eq == "="){
        return n <= m ? 1 : 0
    }
    else if (ineq == ">" && eq == "="){
        return n >= m ? 1 : 0
    }
    else if(ineq == "<" && eq == "!"){
        return n < m ? 1 : 0
    }
    else if (ineq == ">" && eq == "!"){
        return n > m ? 1 : 0
    }
    return 0
}

4가지 경우의 수를 4개의 조건문으로 처리하여 해결하였다.

 

🏆 모범 풀이

func solution(_ ineq:String, _ eq:String, _ n:Int, _ m:Int) -> Int {
    switch ineq+eq {
        case ">=": return n >= m ? 1 : 0
        case "<=": return n <= m ? 1 : 0
        case ">!": return n > m ? 1 : 0
        case "<!": return n < m ? 1 : 0
        default: return 0
    }
}

모범 풀이에서는 switch문을 사용하여 더욱 깔끔하게 해결한 모습이다.

비슷한 상황인 경우 switch문을 같이 생각해봐야겠다.

 

✅ 8. flag에 따라 다른 값 반환하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ a:Int, _ b:Int, _ flag:Bool) -> Int {
    return flag ? a + b : a - b
}

쉬운 문제였다. 삼항연산자로 깔끔하게 해결~

 

✅ 9. 코드 처리하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ code:String) -> String {
    var result : String = ""
    var mode : Int = 0
    let characters = Array(code)

    for i in 0..<characters.count{
        // 1인 경우 mode를 변경해주고 다음 반복문으로 넘어간다.
        if(characters[i] == "1"){
            mode = mode == 0 ? 1 : 0
            continue
        }
        // 모드가 0이고 짝수인 경우
        if(mode == 0 && i % 2 == 0){
            result += String(characters[i])
        }

        // 모드가 1이고 홀수인 경우
        if(mode == 1 && i % 2 != 0){
            result += String(characters[i])
        }
    }
    return result.count == 0 ? "EMPTY" : result
}

switft는 문자열을 인덱스로 접근할 수 없기 때문에 char배열로 만들어서 관리하였다.

return 값을 뱉을 때 삼항연산자로 빈 값인지 확인하고 반환!

 

🏆 모범 풀이

func solution(_ code: String) -> String {
    let result = code.enumerated().reduce(into: ("", 0)) { acc, val in
        let (i, c) = val

        if c == "1" {
            acc.1 = 1 - acc.1
        } else if (acc.1 == i % 2) {
            acc.0 += String(c)
        }
    }
    return result.0.isEmpty ? "EMPTY" : result.0
}

모범 풀이에서는 enumeratedreduce를 사용하여 더욱 간결하게 해결된 모습이다.

enumerated 함수는 배열을 매개변수로 넣으면 (n,value)의 튜플 형태의 시퀀스로 반환을 해주는데

n은 인덱스 번호이고, value는 인덱스에 해당하는 값이다. 여기에 reduce를 활용할 수 있다니 대단하다..

 

✅ 10. 등차수열의 특정한 항만 더하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃나의 풀이

func solution(_ a:Int, _ d:Int, _ included:[Bool]) -> Int {
    
    var result = 0
    for (index, isIncluded) in included.enumerated(){
        if(isIncluded){
            result += a + index * d
        }
    }
   return result
}

enumerated함수를 사용하여 풀어보았다.

enumerated함수는 시퀀스를 튜플(value, value) 형태로 반환해주는 함수이다.

 

🏆 모범 풀이

func solution(_ a: Int, _ d: Int, _ included: [Bool]) -> Int {
    return included.indices.filter { included[$0] }.map { a + d * $0 }.reduce(0, +)
}

모범 풀이를 보니 reduce를 사용해서 간결하게 표현했다.

reduce를 사용하면 for문을 생략할 수 있는 모양인데 나에겐 아직 쓰기 어렵다..

다음에 map,reduce를 제대로 정리해야겠다.