Home [Swift] 프로그래머스 Lv.0 문제 - 2
Post
Cancel

[Swift] 프로그래머스 Lv.0 문제 - 2

❤️‍🔥 프로그래머스 Lv. 0 문제로 Swift와 친해지기!

import Foundation 생략

나이 출력

1
2
3
func solution(_ age:Int) -> Int {
    return 2023 - age
}

배열 뒤집기

1
2
3
func solution(_ num_list:[Int]) -> [Int] {
    return num_list.reversed()
}

문자열 뒤집기

1
2
3
func solution(_ my_string:String) -> String {
    return String(my_string.reversed())
}

직각삼각형 출력하기

1
2
3
4
let n = readLine()!.components(separatedBy: [" "]).map { Int($0)! }
for i in 1...n[0] {
    print(String(repeating: "*", count: i))
}

짝수 홀수 개수

1
2
3
4
func solution(_ num_list:[Int]) -> [Int] {
    var evenCount = num_list.filter{ $0 % 2 == 0 }.count
    return [evenCount, num_list.count - evenCount]
}

문자 반복 출력하기

1
2
3
4
5
6
7
func solution(_ my_string:String, _ n:Int) -> String {
    var answer: String = ""
    my_string.forEach { char in
        answer.append(String(repeating: char, count: n))
    }
    return answer
}

특정 문자 제거하기

1
2
3
4
5
func solution(_ my_string:String, _ letter:String) -> String {
    return my_string.components(separatedBy: letter).joined()
    //return my_string.replacingOccurrences(of: letter, with: "")
    //return my_string.filter{String($0) != letter}
}

문자열 관련 메서드들 더 공부하기!!

각도기

1
2
3
4
5
6
7
8
9
func solution(_ angle:Int) -> Int {
    if angle < 90 {
        return 1
    } else if angle == 90 {
        return 2
    } else if angle < 180 {
        return 3
    } else { return 4}
}

양꼬치

1
2
3
4
func solution(_ n:Int, _ k:Int) -> Int {
    var price = n * 12000 + (k - n / 10) * 2000
    return price
}

짝수의 합

1
2
3
4
func solution(_ n:Int) -> Int {
    var list = Array(1...n)
    return list.filter{ $0 % 2 == 0 }.reduce(0, +)
}

배열 자르기

1
2
3
func solution(_ numbers:[Int], _ num1:Int, _ num2:Int) -> [Int] {
    return Array(numbers[num1...num2])
}

외계행성의 나이

1
2
3
4
5
6
7
8
func solution(_ age:Int) -> String {
    var ageStr = String(age).map{ Int(UnicodeScalar(String($0))!.value) }
    
//     print(UnicodeScalar("a").value) // 97
//     print(UnicodeScalar("0").value) // 48
                                  
    return ageStr.map{ String(UnicodeScalar($0+49)!) }.joined()
}

숫자 10개밖에 없는데 그냥 Array 만들어서 풀 걸.. 이라는 후회를 해봅니다.

진료순서 정하기

1
2
3
4
5
6
7
8
func solution(_ emergency:[Int]) -> [Int] {
    var turn = emergency.sorted(by: {$0 > $1})
    var answer: [Int] = []
    for e in emergency {
        answer.append(turn.index(of: e)! + 1)
    }
    return answer
}

순서쌍의 개수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func solution(_ n:Int) -> Int {
    var answer = 0
    var rt = Int(sqrt(Double(n)))
    for i in 1...rt {
        if n % i == 0 {
            answer += 1
        }
    }
    answer *= 2
    if rt * rt == n {
        answer -= 1
    }
    return answer
}

개미 군단

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func solution(_ hp:Int) -> Int {
    var hp = hp
    var answer = 0
    // // 장군개미
    // answer += hp / 5
    // hp %= 5
    // // 병정개미
    // answer += hp / 3
    // hp %= 3
    // // 일개미
    // answer += hp
    
    for p in [5, 3, 1] {
        answer += hp / p
        hp %= p
    }

    return answer
}

모스부호 (1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func solution(_ letter:String) -> String {
    let morse = [".-": "a", "-...": "b", "-.-.": "c", "-..": "d",
                 ".": "e", "..-.": "f", "--.": "g", "....": "h",
                 "..": "i", ".---": "j", "-.-": "k", ".-..": "l",
                 "--": "m", "-.": "n", "---": "o", ".--.": "p",
                 "--.-": "q", ".-.": "r", "...": "s", "-": "t",
                 "..-": "u","...-": "v", ".--": "w", "-..-": "x",
                 "-.--": "y", "--..": "z"]

    // var temp = letter.split(separator: " ").map{ String($0) }
    var temp = letter.components(separatedBy: " ")      //components를 사용하면 반환형이 String
    var answer = ""
    for m in temp {
        answer += morse[m]!
    }
    
    return answer
}

가위 바위 보

1
2
3
4
func solution(_ rsp:String) -> String {
    var win = ["2": "0", "0": "5", "5": "2"]
    return rsp.map{ win[String($0)]! }.joined()
}

구슬을 나누는 경우의 수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func solution(_ balls:Int, _ share:Int) -> Int {
    // var a = (balls - share + 1...balls).reduce(1, *)
    // var b = (1...share).reduce(1, *)
    
    var answer: Double = 1.0
    
    var a = Array((balls - share + 1...balls).map{ Double($0) }.reversed())
    var b = (1...share).map{ Double($0) }
    
    for i in 0..<share {
        answer *= a[i]
        answer /= b[i]
    }
    
    return Int(answer)
}

이게 제일 어려웠다.
곱하기라 숫자 범위도 커지고 나눗셈에서 부동소수점도 고려해야해서 한 번에 모아서 계산하는 방식이 아닌,
하나씩 꺼내서 누적 결과에 분자 부분 먼저 곱하고 분모를 그 뒤에 나누는 방식으로 계산해주었다.

점의 위치 구하기

1
2
3
4
5
6
7
8
9
10
11
12
func solution(_ dot:[Int]) -> Int {
    let x = dot[0]
    let y = dot[1]
    
    if x * y > 0 {
        guard x > 0 else { return 3 }
        return 1
    } else {
        guard x > 0 else { return 2 }
        return 4
    }
}

2차원으로 만들기

1
2
3
4
5
6
7
func solution(_ num_list:[Int], _ n:Int) -> [[Int]] {
    var answer: [[Int]] = []
    for i in 0..<(num_list.count / n) {
        answer.append(Array(num_list[n*i..<n*(i+1)]))
    }
    return answer
}
This post is licensed under CC BY 4.0 by the author.