상세 컨텐츠

본문 제목

[코딩테스트] 프로그래머스 - LV2 최댓값과 최솟값구하기

iOS 캐기/Interview

by Atlas 2023. 10. 31. 20:25

본문

728x90
반응형

문제설명

 

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.제한 조건s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

입출력 예
    
s                        return
"1 2 3 4"           "1 4"
"-1 -2 -3 -4"    "-4 -1"
"-1 -1""     "-1 -1""    

 

 

 

해결방법

고차함수를 사용한다면 코드 2줄로 제출할 수 있다. 무조건 고차함수를 쓰는 것에 포커스를 맞추기 보다 스스로 풀 수 있는 방법을 생각해보고 풀어보는 것을 권장한다. 해결 후 다양한 해결법을 보게 된다면 다양한 풀이법이 더 이해가 잘 되기 때문이다. 

 

1. compactMap()을 사용하고 sorted() 를 통해서 Int로 타입캐스팅 후 소팅된 문자열을 할당받은 map 변수의 fist,last 를 리턴

func solution(_ s:String) -> String {
    let map = s.components(separatedBy: " ").compactMap{$0}.sorted { new, old in
        let convertedNew = Int(new) ?? 0
        let convertedOld = Int(old) ?? 0
        
        return convertedNew < convertedOld
    }

    guard let first = map.first, let last = map.last else {
        return ""
    }
    
    return "\(first) \(last)"
}

 

2. 위의 답변에서 조금 더 간결하게 변경해보자.

func solution(_ s:String) -> String {
    let map = s.components(separatedBy: " ").compactMap{ Int($0)}.sorted()
    return "\(map.min()!) \(map.max()!)"
}

 

3.compactMap() 대신에 map() 사용할 수도 있다. 

func solution(_ s:String) -> String {
    let map = s.components(separatedBy: " ").map{ Int($0)! }.sorted()
    return "\(map.min()!) \(map.max()!)"
}

 

반응형

관련글 더보기

댓글 영역