TIL

230831 프로그래머스 문제풀기

유초23 2023. 8. 31. 23:47
728x90

* 저주의 숫자 3 문제에서

 

처음에 열심히 규칙을 찾으려고 노력해서

 

def solution(n):
    for i in range(34):
        if n % 3 == 1 and n // 3 == i:

 

이런식으로 조건들을 나열해서 문제를 풀어보려고 했는데 ,,

규칙이 너무 안보였다 ㅠ ㅠ

 

그래서 구글링을 했돠 ..!

이 때까진 정말 쉬운문제라고 생각했는데

 

def solution(n):
    answer = 0
    for i in range(n):
        answer += 1
        if answer % 3 == 0 or '3' in str(answer):
            answer += 1
    return answer

 

이 코드로도 해결이 안돼서 이 문제에 더 시간을 썼다 ,,

슬프다 흐규 ㅠ

 

그 래 서 !

 

def solution(n):
    answer = 0
    for i in range(n):
        answer += 1
        if answer % 3 == 0 or '3' in str(answer):
            answer += 1
        while answer % 3 == 0 or '3' in str(answer):
            answer += 1
    return answer

 

이렇게 문제를 해결하였다 !

마지막에 한번 더 계산을 해줘야하는 것이었다 ! 30대로 들어가면 계속 +1을 해줘야하니까 while이 필요 !

 


* 전국 대회 선발 고사 문제에서

 

처음에

 

def solution(rank,attendance):
    new = []
    new1 = []
    for i,a in enumerate(attendance):
        if a == "true":
            for j,b in enumerate(rank):
                new.append(rank[i])
                new1 = sorted(new)
                return 10000 * new.index(new1[0]) + 100 * new.index(new1[1]) + new.index(new1[2])

 

이렇게 문제를 해결하려고 했는데 실패하였다 ㅠ

 

구글링으로 힌트를 얻어

 

def solution(rank,attendance):
    students = sorted([(a,i) for i,a in enumerate(rank)])

    answer = []

    for a,i in students:
        if attendance[i]:
            answer.append(i)
            if len(answer) == 3:
                break

    return 10000 * answer[0] + 100 * answer[1] + answer[2]

 

이렇게 문제를 해결하였다 !

 

students = sorted([(a,i) for i,a in enumerate(rank)])

 

이 부분이 나에게는 약간 헉 (⊙o⊙) 한 부분이어똬 ..!

배워가는 너낌 ,,

 

그런데 아주 간결하게 짜놓은 코드를 발견했다 !

바로

 

def solution(rank, attendance):
    arr = sorted([(x, i) for i, x in enumerate(rank) if attendance[i]])
    return arr[0][1] * 10000 + arr[1][1] * 100 + arr[2][1]

 

W o W !


* 잘라서 배열로 저장하기 문제에서

 

처음에 나는

 

def solution(my_str,n):
    return [my_str[i*n:(i+1)*n] for i in range(round(len(my_str)/n))]

 

이렇게 문제를 풀었는데, 두 문제가 해결이 되지 않아서 다시 생각해보았더니,

아예 올림을 해주어야했다 !

 

올림함수는 ceil()함수인데, 이 함수를 사용할 때에는 import math를 해주고 math.ceil()이라고 써야한다 !

round함수는 반올림함수이고, import를 하지 않아도 된다 !

 

그래서

 

import math

def solution(my_str,n):
    return [my_str[i*n:(i+1)*n] for i in range(math.ceil(len(my_str)/n))]

 

이렇게 문제를 해결하였다 !

 

그런데 내가 문제를 보자마자 뭔가 이렇게 풀면 풀리겠다 싶었던 코드가 있어서 가져와봤다 !

 

def solution(my_str, n):
    return [my_str[i: i + n] for i in range(0, len(my_str), n)]

 

아주 쉽고 깔끔하다 !

다음엔 이렇게 풀어야쥥 ,,


* 특이한 정렬 문제에서는

 

def solution(n,numlist):
    tmp = sorted([(a,i) for i,a in enumerate(numlist)],reverse=True)
    
    for a,i in tmp:
        num = [abs(a-n)]
        num = sorted(num)
        for j in range(len(num)):

 

이런식으로 문제를 풀려다가 너무 복잡해질 것 같아서 다른 방법을 생각해보기로 했다 ㅠ

 

몇번의 실패 끝에 구글링으로 찾아냈지만 ...

여전히 해결이 되지 않은 ...

 

def solution(n,numlist):
    answer = []
    for i in numlist:
        answer.append(i-n)
        
    result = []
    for i in sorted(answer[:], key=lambda x : [abs(x) , -x]):
        result.append(numlist[answer.index[i]])
    return result

 

이 코드와

 

def solution(n, numlist):
    # 정렬 기준을 설정하는 함수를 lambda로 정의합니다.
    # 거리가 같으면 더 큰 수가 앞으로 오도록 설정합니다.
    sorted_list = sorted(numlist, key=lambda x: (abs(x - n), -x))

    return sorted_list

 

이 코드 모두 TypeError: 'int' object is not iterable 이 에러가 나온다 ,,

 

여기에서 lambda를 사용할 때 참고하면 좋을 링크 !

 

https://gorokke.tistory.com/38

 

람다(lambda) 총 정리, key sort, key 정렬

1. 람다(lambda) 1 ) 의미 익명함수를 지칭하는 용어 즉, 기존의 함수(명 등)을 선언하고 사용하던 방식과는 달리 바로 정의하여 사용할 수 있는 함수. 2 ) 형식 : lambda 인자 : 표현식 예시) sum = lambda x:

gorokke.tistory.com

 

https://velog.io/@euisuk-chung/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%8B%9C%EA%B0%81%ED%99%94-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0-%EB%9E%8C%EB%8B%A4Lambda-%ED%95%A8%EC%88%98

 

파이썬 마스터하기 : 람다(Lambda) 함수

람다(lambda) 함수는 함수형 프로그래밍에서 중요한 개념 중 하나로, 익명 함수(anonymous function)라고도 부릅니다.

velog.io

 

이 문제는 내일 다시 도젼 ,,


* 문자열 계산하기 문제에서는

 

def solution(my_string):
    a,b,c = my_string.split(" ")
    while b == "+":
        return int(a) + int(c)
    return int(a) - int(c)

 

요로케 풀어봤는데 런타임 에러가 많이 나서 실 패 ^ ^ ..


일단 머리가 아파서 오늘은 여기까지 ,,

내일 다시 해보자고 ~!~

화이팅 ~!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90