230822 프로그래머스 문제풀기 & 온라인 스터디 & 토익공부
* 문자열 여러 번 뒤집기 문제에서
처음에 나는
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 공부를 해야겠다 !
화이팅 !