아자아자 화이팅이닷 !

230801 프로그래머스 문제풀기 본문

TIL

230801 프로그래머스 문제풀기

유초23 2023. 8. 2. 01:17
728x90

벌써 8월이다 ...

시간 너무 빠르다 ㅠ 화이팅 ~!~

스터디에서 정해준 기한이 내일까지이기 때문에 오늘 TIL은 간략하게 진행해 볼 예정이닷 ..!


* 인덱스 바꾸기 문제에서


    # num1과 num2에 해당하는 문자를 슬라이싱하여 추출
    char1 = my_string[num1]
    char2 = my_string[num2]

이 작업을 했어야 문제를 쉽게 풀 수 있었다 !

 

def solution(my_string, num1, num2):
    s = list(my_string)
    s[num1],s[num2] = s[num2],s[num1]
    return ''.join(s)

이렇게 list를 만들어주고 푸는 방법도 있다 !


* 가까운 1 찾기 문제에서

 

나는

def solution(arr,idx):
    for i in range(len(arr)):
        if arr[i] == 1:
            if i > idx:
                return i
            elif i == idx:
                return i
    return -1

이렇게 코드를 짰는데,

 

def solution(arr, idx):
    for i in range(idx, len(arr)):
        if arr[i] == 1:
            return i
    return -1

이렇게 더 간단하게 코드를 짤 수 있었다 !


* 두 수의 연산값 비교하기 문제에서

 

나는

def solution(a,b):
    return int(str(a) + str(b)) if int(str(a) + str(b)) > 2*a*b else (int(str(a) + str(b)) if int(str(a) + str(b)) == 2*a*b else 2*a*b)

이렇게 코드를 짰는데,

 

max()함수를 이용하여 더 간단하게 짤 수 있는 방법이 있었다.

def solution(a, b):
    return max(int(str(a) + str(b)), 2 * a * b)

* 간단한 식 계산하기 문제에서

 

다른 분들이 eval()함수를 사용해서 아주 간단하게 문제를 푸셨다 !

 

eval()함수에 대한 설명은

https://hbase.tistory.com/397

 

[Python] 파이썬 eval() 함수 사용법 및 예제

파이썬은 eval()이라는 함수를 지원한다. 파이썬의 eval() 함수는 문자열로 표현되는 표현식(expression)을 실행해서 결과값을 받아오는 함수다. 예를 들어보자. exp = "1 + 2" result = eval(exp) print(result) # 3

hbase.tistory.com

을 참고하면 좋을 것 같다 !


* 피자 나눠 먹기 문제에서는

 

소인수분해를 해야할지 어떻게 쉽게 해결할 수 있을지 감이 안와서 검색을 했다.

 

그 결과

def solution(n):
    pizza = 1

    while (pizza*6) % n != 0:
        pizza += 1

    return pizza

이렇게 하면 답이 나왔다 !


* 접미사 배열 문제에서

 

처음에는 어떻게 풀어야할지 막막했는데 GPT에게 힌트를 얻어서 문제를 해결했다 !

 

GPT도 오류가 많아서 ㅋㅋ ㅠ 힌트를 얻어서 푸는 문제들도 꽤 있는 것 같다 (*^▽^*)

 

그래서 이 문제는

def solution(my_string):
    answer = []
    for i in range(len(my_string)):
        answer.append(my_string[-i:])
    answer.sort()
    return answer

이렇게 풀었는데,

 

사실 그냥

def solution(my_string):
    return sorted(my_string[i:] for i in range(len(my_string)))

이렇게 풀어도 상관없을듯 ㅋ ㅜ

후엥 ,,~ 그래도 배워간다  . . .


* 특별한 이차원 배열 1 문제에서

 

어떻게 풀어야 할지 감이 안와서 고민하다가 검색을 했다 ㅠ

 

def solution(n):
    return [[1 if i == j else 0 for i in range(n)] for j in range(n)]

이렇게 풀면 되는데,

i를 돌리는 for문을 []안에 넣어주고 / 밖에 j를 돌리는 for문을 넣어준게 신기했다 !

저렇게 해도 되는구낭 ,, 


* 문자열 잘라서 정렬하기 문제에서도

 

반대로 생각해보는 작업이 필요하다 !

i가 ""가 아닐때를 생각해보면 쉽다 !


* 주사위 게임 2 문제에서

 

좋은 답을 발견해서 가져왔다 !

def solution(a, b, c):
    answer=a+b+c
    if a==b or b==c or a==c: answer*=a**2+b**2+c**2
    if a==b==c:answer*=a**3+b**3+c**3
    return answer

 

깔 끔 하 다 !


* 배열 만들기 3 문제에서는

 

first_interval = intervals[0]
second_interval = intervals[1]

 

이렇게 값을 먼저 주는것이 중요하다 !

 

아니면

s1, e1 = intervals[0]
    s2, e2 = intervals[1]

이렇게 줘도 되고,

 

아예

def solution(arr, intervals):
    return arr[intervals[0][0]:intervals[0][1] + 1] + arr[intervals[1][0]:intervals[1][1] + 1]

이렇게 바로 코드를 짜도 된다 !


* 369게임 문제에서

order을 for문으로 돌릴때 str(order) 해주면 된다는 것을 기억해야됨 !

그리고 i in '369'를 하면 쉽게 해결된다 !


* 수 조작하기 2 문제에서는

 

for i in range(1, len(numLog)):
        diff = numLog[i] - numLog[i-1] # 현재 값과 이전 값의 차이를 계산

이 부분만 잘 파악하면 문제가 쉽게 풀린다 !


* 합성수 찾기 문제에서

 

계속 고민을 하다가 GPT에게 물어봤는데, 함수를 두개 정의해 주어야했다 ,,

이 코드를 이해하는데에 시간이 좀 들었지만 완벽히 이해했다 !

 

그런데 굳이 def를 두개 만들지 않아도

for문을 두개 돌리고

if i % j == 0:
                output += 1

를 해주면 더 간단히 해결되는 코드가 있었다 ...

 

나에겐 좀 어려운 문제여따 ㅠ


* 문자열 섞기 문제에서

 

나는 if else문과 continue를 사용하는 코드를 짰는데,

str1과 str2의 길이가 같다는 점을 이용해서 더 간단하게 짜는 코드가 있었다 ㅠ

 

for i in range(0,len(str1)):
        answer = answer + str1[i] + str2[i]

그냥 이렇게 해주면 끝 ㅠ

 

continue를 사용하려고 했을때 break와 헷갈렸는데, 둘의 차이는 이렇다 !

 

<GPT 설명>

  1. continue:
    • continue 문은 반복문(주로 for 또는 while 문) 안에서 사용되며, 현재 반복을 중지하고 다음 반복으로 건너뛰는 데 사용됩니다.
    • 즉, continue 문이 실행되면 현재의 반복 실행을 중단하고, 다음 반복으로 진행됩니다.
    • 반복문의 다음 반복으로 건너뛰기 위해 사용됩니다.
    • continue 문이 실행되면 반복문의 나머지 부분은 실행되지 않고, 다음 반복이 시작됩니다.

예시:

for i in range(1, 6):
    if i == 3:
        continue
    print(i)

출력 결과 : 1 2 4 5

 

  1. break:
    • break 문은 반복문(주로 for 또는 while 문) 안에서 사용되며, 반복문을 완전히 종료하는 데 사용됩니다.
    • 즉, break 문이 실행되면 반복문을 더 이상 실행하지 않고 반복문을 완전히 종료합니다.
    • 특정 조건을 만족하면 반복문을 중단해야 할 때 사용됩니다.

예시:

for i in range(1, 6):
    if i == 3:
        break
    print(i)

출력 결과: 1 2


* 2차원으로 만들기 문제에서

 

거의 다 코드를 짰는데 너무 어렵게 생각하려고 해서 자꾸 마무리가 잘 안 맺어지는 것 같다 ㅠ

좀 쉽게 쉽게 생각하려고 하는 노력을 더 해야할 것 같다 ㅠ

 

num_list[i:i+n] 이걸 append하면 됐던 쉬운 문제였다 ㅠ


* 등차수열의 특정한 항만 구하기 문제에서

 

if included[i] == True:

를 하지 않아도

 

int(included[i])

이렇게 조건을 주면 더 간략하게 코드를 짤 수 있다 !


* 날짜 비교하기 문제에서

나는 if elif문을 사용해서 풀었는데,

 

def solution(date1, date2):
    return int(date1 < date2)

이렇게 리스트끼리의 비교가 가능하다는걸 알았다 ...

역시 고수들은 ...


* 팩토리얼 문제는

계속 오류가 나서 GPT에게 물어보았는데,

 

정말 뭔가 생각의 폭을 키워야겠다는 생각이 들었다 ㅋㅋ ㅠ

 

def solution(n):
    i = 1
    factorial = 1

    while factorial <= n:
        i += 1
        factorial *= i

    return i-1

생각치 못한 답이어서 놀람 ㅠ

대 다 내 ,,~


* A로 B 만들기 문제에서는

계속 시도를 해보다가 오류가 나서 힌트를 얻으려고 검색을 해봤는데 너무 대단한걸 봐버렸다 ..

 

sorted()함수를 써주고 비교를 해주면 너무 깔끔하고 간결하게 해결이 되었다 ...

대박ㄱ수 ....


* k의 개수 문제에서는

 

if str(k) in str(a):
            answer += str(a).count(str(k))

이게 핵심이다.

 

여기에서는 count()함수를 알아야 한다는거 !


오늘은 여기까지 ㅠ

힘둘다 ㅠ

하지만 화이팅이다 !

오늘은 30개 클리어 ,,~

728x90