본문 바로가기
알고리즘 문제풀이/프로그래머스 Lv0

[프로그래머스] 코딩테스트 기초

by summer_light 2023. 5. 31.

[내 풀이]
def solution(date1, date2):
    return 1 if int(''.join(map(str, date1))) - int(''.join(map(str, date2)))<0 else 0

[참고 풀이]
- 리스트도 비교가 가능하구나
def solution(date1, date2):
    return int(date1 < date2)

[내 풀이]
def solution(myStr):
    res = myStr.split('a')
    temp = []
    for x in res:
        temp += x.split('b')
    ans = []
    for x in temp:
        ans += x.split('c')
    ans = [x for x in ans if x != '']
    return ans if len(ans)!=0 else ["EMPTY"]

[참고 풀이]
- 구분자 a, b, c 는 모두 같은 역할을 하기 때문에, 하나의 다른 문자로 바꿔버리고 같은 취급을 해버리는 것이 핵심
def solution(myStr):
    answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
    return answer if answer else ['EMPTY']

[내 풀이]
- try-except 구문을 이용해서 오류 발생시 다른 로직이 작동하도록 한다
def solution(arr):
    try:
        if (arr[::-1].index(2)==0):
            return arr[arr.index(2):]
        return arr[arr.index(2):-(arr[::-1].index(2))]
    except:
        if 2 not in arr:
            return [-1]

[참고 풀이]
- -1, -2, -3 과 같이 리스트 값을 찾으려 할 때 문제가 발생하는 것이기 때문에 len(arr)을 이용해서 양수인덱스로 표현하도록 한다
def solution(arr):
    if 2 not in arr:
        return [-1]
    return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]

[내 풀이]
- 이렇게 하면 마지막의 경우는 n번 조건문을 확인해야 해서, n이 커질 수록 이진 트리 방식으로 조건문을 나누는 게 좋다고 한다.
def solution(n, slicer, num_list):
    a,b,c = slicer
    if n==1:
        return num_list[:b+1]
    elif n==2:
        return num_list[a:]
    elif n==3:
        return num_list[a:b+1]
    else:
        return num_list[a:b+1:c]

[참고 풀이]
- n에 따라 어떤 공식을 사용할 지 고르는 것을 리스트 안에 공식들을 넣어놓고 [n-1]인덱스를 찾아가도록 할 수 있구나.
def solution(n, slicer, num_list):
    a, b, c = slicer
    return [num_list[:b + 1], num_list[a:], num_list[a:b + 1], num_list[a:b + 1:c]][n - 1]

[내 풀이]
def solution(arr):
    stk=[]
    i=0
    while i<len(arr):
        if stk==[]:
            stk.append(arr[i])
        else:
            if stk[-1] == arr[i]:
                stk.pop()
            else:
                stk.append(arr[i])
        i+=1
    return stk if stk!=[] else [-1]
[참고 풀이]
- return stk or [-1] : 객체 or 연산. bool(Left Object)가 false이면(비어 있으면) 오른쪽 값을 사용한다!
- stk.append(arr[i])가 중복되니까, 한 가지의 경우로 요약
- while, i=0, i++ 이 for 과 완전히 같으므로 for으로 표현
def solution(arr):
    stk = []
    for i in range(len(arr)):
        if stk and stk[-1] == arr[i]:
            stk.pop()
        else:
            stk.append(arr[i])

    return stk or [-1]

댓글