TIL

230822 프로그래머스 문제풀기 & 온라인 스터디 & 토익공부

유초23 2023. 8. 22. 23:32
728x90

* 문자열 여러 번 뒤집기 문제에서

 

처음에 나는

def solution(my_string,queries):
    answer = ""
    for char in my_string:
        for s,e in queries:
            if my_string.index(char) == s
            answer += char

이런식으로 문제를 풀어보려고 했었는데, 코드가 너무 지저분해지는 것 같아서 지워버렸돠 ..

 

구글링을 해본 결과 아주 쉽게 문제를 해결할 수 있었다 ..

 

def solution(my_string,queries):
    for s,e in queries:
        my_string = my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
    return my_string

바로 이렇게 ..!

 

왜 생각이 안났던건지 .. 뇌가 굳었나 .. ㅜ

충분히 쉽게 해결할 수 있었던 문제인데 ,, 아쉽다 .. 흐규 ..


* 정사각형으로 만들기 문제에서는

 

def solution(arr):
    for i in range(len(arr)):
        if len(arr) > len(arr[i]):
            k = len(arr) - len(arr[i])
            arr[i].append(0*k)
        elif len(arr[i]) > len(arr):
            k = len(arr[i]) - len(arr)
            arr.append([0]*len(arr[i]))
    return arr

처음 짠 코드가 코드 실행에서는 다 성공했는데, 제출하니까 통과되지 않았다 ,,

 

여기에서 첫번째 문제는

arr[i].append(0*k)

이 부분이었다.

 

<GPT 설명>

여기서 0*k를 사용하려는 것은 0을 k번 반복해서 리스트에 추가하려는 의도일 것입니다.

그러나 0*k는 0을 k번 반복한 리스트가 아니라, 0과 k를 곱한 결과를 나타내게 됩니다.

올바른 방법은 0을 k번 반복한 리스트를 생성하는 것입니다. 따라서 아래와 같이 수정하면 됩니다.

 

그래서

arr[i].extend([0] * k)

이렇게 수정했더니 정답률이 조금 더 올라갔다 !

 

그리고 두번째 조건에서 k번만큼 행이 추가가 되어야하기 때문에

for _ in range(k):
    arr.append([0] * len(arr[i]))

이 코드를 추가해주었다 ..!

 

그래서

def solution(arr):
    for i in range(len(arr)):
        if len(arr) > len(arr[i]):
            k = len(arr) - len(arr[i])
            arr[i].extend([0]*k)
        elif len(arr[i]) > len(arr):
            k = len(arr[i]) - len(arr)
            for _ in range(k):
                arr.append([0]*len(arr[i]))
    return arr

 

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

 

다른 답들을 봤는데,

def solution(arr):
    n=len(arr)
    m=len(arr[0])
    if n>m:
        for i in range(n):
            for j in range(n-m):
                arr[i].append(0)
    else:
        for i in range(m-n):
            arr.append([0]*m)

    return arr

 

이 코드가 조금 더 이해하기 쉬워보였다 !


*  수열과 구간 쿼리 2 문제에서는

 

min함수를 쓰면 계속 iterable 오류가 나서

따로 배열에 넣어서 min함수를 쓰는 방법을 찾았다.

 

def solution(arr,queries):
    answer = []

    for s,e,k in queries:
        valid_values = [i for i in arr[s:e+1] if i > k]

        if valid_values:
            answer.append(min(valid_values))
        else:
            answer.append(-1)

    return answer

 

힌트를 얻어서 이렇게 문제를 해결했는데,

비슷하지만 append부분이 다른 조금 더 간결한 코드를 발견했다 !

 

def solution(arr, queries):
    answer = []
    for s, e, k in queries:
        tmp = []
        for x in arr[s:e+1]:
            if x > k:
                tmp.append(x)
        answer.append(-1 if not tmp else min(tmp))
    return answer

 

여러가지 방법들을 익혀놓는게 좋을 것 같다 !


일단 이렇게 마무리를 했고 !

토익 공부도 했다 !

온라인 스터디도 했다 !

내일은 sqld 공부를 해야겠다 !

화이팅 !

728x90