프로그래머스- 35

김정현·2023년 5월 15일
0

프로그래머스

목록 보기
35/46

1.

글자도 sorted()키워드로 정렬이 가능하다.

lv.1 인데 이렇게 쉽게 해결되나 싶을 정도로 간단하게 해결했다. 다른사람의 풀이도 비슷비슷하고 클로저를 활용한 경우도 있었다.

2.

배열의 인덱스 개념으로 접근해야겠다고 생각했다. for문과 if문을 합쳐보자.

import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    var A = absolutes
    for i in 0...1000 {
        if signs[i] == false{
            A[i] = -absolutes[i]
        }
    }
    return A.reduce(0, +)
}

오류가 발생했는데, 아마도 i가 유효하지않은 인덱스일때 오류가 발생하는 것 같다.

import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    var A = absolutes
    for i in 0...A.count {
        if signs[i] == false{
            A[i] = -absolutes[i]
        }
    }
    return A.reduce(0, +)
}

core dumped오류가 발생했다. 이오류는 어디가 어떻게 발생된거지 정확히 알 수 없어서 너무 난해하다.

import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    var A = absolutes
    for i in 0...2 {
        if signs[i] == false{
            A[i] = -absolutes[i]
        }
    }
    return A.reduce(0, +)
}

이렇게 0...2 로 접근하였을때는 인덱스가 3개인 조건하에 오류가 발생하지 않은걸로 보아 위에 추측이 맞긴한거같다.

import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    var A = absolutes
    for i in 0...signs.count-1 {
        if signs[i] == false{
            A[i] = -absolutes[i]
        }
    }
    return A.reduce(0, +)
}

최종적으로 count-1을 사용하여 해결하였다. 또 기본적인 실수를 하였다..
다른사람의 풀이로는

import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    return (0..<absolutes.count).map { signs[$0] ? absolutes[$0] : -absolutes[$0] }.reduce(0, +)
}

이렇게 map을 사용하고 삼항연산자를 사용하였다. 모든 요소를 고려해야할때는 클로저로 접근하는게 간단한 것 같다.

3. (Level.2)

우선 문자열을 배열로 변환해 최대값, 최소값을 구해내면 될 것 같다.

func solution(_ s:String) -> String {
    var sarray = Array(s)
    return String(sarray.max()!)
}

우선 정상적을 출력되는지 확인해봤는데, 언랩핑을 해야만했다. 최대값이 없을수도 있기때문이다. 정상적으로 출력됐으니 min값과 공백을 구현하자.

func solution(_ s:String) -> String {
    var sarray = Array(s)
    return String(sarray.min()!) + "" + String(sarray.max()!)
}

엉뚱한 답이 나온다. 많이 잘못된듯 하다. 빈칸이 min값으로 적용되는거 같다. 아예 정수형 배열로 변환해서 min max를 찾는다면 수월할 것 같다.
compact맵을 활용하기로 했다.

func solution(_ s:String) -> String {
    var sarray = s.split(separator: " ").compactMap { Int($0) }
    return String(sarray.min()!) + " " + String(sarray.max()!)
}

공백을 이용해서 아예 자체를 정수형 배열로 바꿨다.

다른사람들은 마지막 리턴형을 아예

return "\(minNum) \(maxNum)"

이런식을 설정해 더 간단하게 생략하였다.

0개의 댓글