cording test

LV.2 최댓값과 최솟값

JM Lee 2023. 4. 28. 20:40
728x90

코딩테스트 연습 - 최댓값과 최솟값 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

레벨 2는 도전해야겠다라고 마음은 먹었지만, 막상 도전하고 2문제 정도 좌절을 겪었다..애석하게도..

 

그래서 정답률이 높은 레벨2부터 풀어보면서 실력을 천천히 키워보기로..

 

늘 유념하는 마음이지만

 

기획단계에서부터 꼼꼼하게 하면 풀이가 훨씬 쉬워진다는 점!

 

나의 풀이

def solution(s):
    i = list(map(int,s.split(" ")))
    return str(min(i)) + " " + str(max(i))

# s를 blank로 split한 후 int 상태에서 최댓값과 최솟값 걸러내기
# 걸러낸 후 다시 원상태 str으로 만들기

생각보다 쉽게 풀어서 좋았는데,

다른 분이 쓴 코드를 보고 기겁해서 코드를 해체해서 분석해보려고 했지만..

첫 줄부터 사실 이해가 잘 가지 않아서 일단 공유만 해놓겠다.

s가 문자열인 상태인데 어떻게 조건문에 s[0]가 나올 수 있지..?

 

숏코딩으로 해결하시는 분들도 대단하지만

이렇게 내장함수 없이 해결하시는 분도 참 대단한 것 같다

다른 분의 풀이

def solution(s):
    t = []
    if s[0] != "-":
        s = "+" + s
    for i in range(0, len(s)):
        t += [s[i]]
    for i in range(0, len(t)):
        if t[i] == " " and t[i+1] != "-":
            t.insert(i+1, "+")
    for i in range(1, len(t)):
        if t[len(t)-i] == " " and t[len(t)+1-i] != "-":
            t.insert(len(t)+1-i, "+")
            break
    print(t)
    result = []
    midcount1 = ""
    midcount2 = ""
    
    for i in range(len(t)):

        if t[i] == "-": 
            for j in range(i+1, len(t)):
                if t[j] != " ":
                    midcount1 = midcount1 + t[j]
                    if j == len(t)-1:
                        result += [-int(midcount1)]
                        midcount1 = ""
                        break
                elif t[j] == " ":
                    print(midcount1)
                    result += [-int(midcount1)]
                    midcount1 = ""
                    break

        elif t[i] == "+":
            for j in range(i+1, len(t)):
                if t[j] != " ":
                    midcount2 = midcount2 + t[j]
                    if j == len(t)-1:
                        result += [int(midcount2)]
                        midcount2 = ""
                        break
                elif t[j] == " ":
                    print(midcount2)
                    result += [int(midcount2)]
                    midcount2 = ""
                    break


    print(result)
    resultmax = int(result[0])
    resultmin = int(result[0])
    for i in range(len(result)):
        if resultmax < result[i]:
            resultmax = result[i]
    for i in range(len(result)):
        if resultmin > result[i]:
            resultmin = result[i]
    return "%s %s" % (resultmin, resultmax)

'cording test' 카테고리의 다른 글

LV.1 둘만의 암호  (0) 2023.05.03
LV.1 비밀지도/ 파이썬 bin함수 / zfill 함수  (0) 2023.05.02
LV.1 피보나치 수  (2) 2023.04.27
삼총사  (0) 2023.04.25
LV.1 숫자 문자열과 영단어  (0) 2023.04.25