[프로그래머스] 최대값과 최소값

YoungHyun Kim·2023년 12월 11일
1

매일매일 알고리즘

목록 보기
21/30

문제

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

제한 조건

  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

풀이

  1. 공백을 만나기 전가지 값을 읽어들이기
  2. 공백을 만나면, 읽어 들인 값을 정수로 변환하고 배열에 저장하기
  3. 모든 수의 입력이 끝나면 정렬한 후 최대값과 최소값을 반환
func solution(_ s:String) -> String {
    var temp = [String](), input = Array(s), result: [Int] = []
    var count = 0
    
    for thing in input {
        if thing != " " {
            temp.append(String(thing))
            if count == input.count - 1 {
                result.append(Int(String(temp.joined()))!)
            }
        } else if thing == " " {
            result.append(Int(String(temp.joined()))!)
            temp = []
        }
        count += 1
    }
    result.sort(by: <)
    return "\(result.removeFirst()) \(result.removeLast())"
}

회고

  1. 문제 자체는 어렵지 않았지만, 숫자를 저장하는 트리거를 "공백을 만났을 때"로 설정을 해두어 문자열 맨 끝에 있는 숫자가 저장이 안되는 오류가 존재했다.
  2. 그래서 카운트할 수 있는 변수를 하나 설정해서, 해당 변수가 문자열의 마지막 인덱스(s.count - 1)와 일치하면 그동안 읽어들인 문자를 정수로 받아내도록 문제를 해결했다.

요즘 알고리즘 문제를 해결할 때 브레이크포인트를 설정해서 디버깅을 진행하는데, 이번 주차에 lldb관련 강의가 있기 때문에 이걸 학습한 후에 꼭 알고리즘 문제 해결에 도입해보도록 하고 싶다!

profile
iOS 개발자가 되고 싶어요

0개의 댓글