본문으로 바로가기

[Programmers] 최댓값과 최솟값

category Algorithm/Programmers 2023. 1. 8. 13:25
728x90
반응형

Description

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최솟값과 최댓값을 찾아 이를 "(최솟값) (최댓값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.

예를 들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

제한 조건

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

 

Solve

리스트가 아닌 문자열로 이루어진 숫자의 나열을 입력받아 최솟값과 최대값을 구하는 문제이다.


01. MIN, MAX 함수 이용하기

처음엔 min, max 함수를 이용한 다음 방식으로 풀었다.

def solution(s):
    split_of_space = [int(x) for x in s.split(" ")]

    return f"{min(split_of_space)} {max(split_of_space)} "

 


02. 정렬을 이용한 방식

1번 방식으로 풀었던 접근 방법을 이용하면 정렬의 특성을 이용해도 풀리는 문제이다. python의 sort() 함수는 기본이 내림차순으로 정렬되기 떄문에 0번 index에는 최소값이 마지막 인덱스에는 최대값이 들어간다.

def solution2(s):
    s = list(map(int, s.split()))
    s.sort()

    return f"{s[0]} {s[-1]}"

재미난 것은 1번 방식에 최솟값, 최댓값을 찾기 위해 comprehension을 이용했는데 map을 이용해 같은 기능을 할 수 있도록 작성할 수 있었다는 점이다.

 

Note

이 문제는 풀면서 왜 이게 Level2에 속한 문제지라는 의문이 드는 정도였는데 string 함수를 다양하게 사용해서 풀어보는 연습을 용도라면 Level2가 적당한 것 같다. 예를 들어 다음과 같은 방식으로 말이다.

from typing import Tuple, List

def solution(s):

    space_index = []
    str_length = len(s)

    for index, ch in enumerate(s):
        if ch.isspace():
            space_index.append(index)

    space_index.insert(0, 0)
    space_index.append(str_length)

    offset_range: List[Tuple[int, int]] = []
    for index in range(len(space_index)):
        if index == 0:
            continue

        offset_range.append((space_index[index - 1], space_index[index]))

    answer_result = []
    for offset in offset_range:
        result = int(s[offset[0]: offset[1]].strip())
        answer_result.append(result)

    return f"{min(answer_result)} {max(answer_result)}"

위 풀이 방식에서는 isspace() 함수를 이용해 공백을 기준으로 문자를 자르고 공백의 위치를 저장한다. 이렇게 저장한 공백의 위치를 다시 slice 처리하여 숫자를 나타내는 문자열의 범위를 조정하는 작업을 거친뒤 리스트에 저장하고 다시 min, max를 사용해 결과값을 리턴한다.

728x90
반응형

'Algorithm > Programmers' 카테고리의 다른 글

[Programmers] 다음 큰 숫자.  (0) 2023.01.15
[Programmers] 올바른 괄호  (0) 2023.01.15
[Programmers] 평행  (0) 2022.12.12
[Programmers] 7의 갯수 구하기  (0) 2022.12.08
[Programmers] 옹알이 - 다시 풀어보기  (0) 2022.12.07