일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬 #python #기초 #기본
- #코딩독학 #코딩인강 #코딩배우기 #개발자 #코딩이란 #코딩교육 #프론트엔드부트캠프 #백엔드부트캠프 #국비지원부트캠프 #개발자 #백엔드 #AI부트캠프 #개발자국비지원 #백엔드개발자
- #프론트엔드개발자
- Today
- Total
아자아자 화이팅이닷 !
230802 프로그래머스 문제풀기 본문
* 수열과 구간 쿼리 1 문제에서
s,e를 어떻게 선언을 해야할지 고민하다가 코드를 짰는데 동작을 안해서 GPT에게 물어봤다 ㅜ
for query in queries:
s,e = query
를 해주고
for i in range(s,e+1):
arr[i] += 1
을 해주면 쉽게 해결되는 문제였다.
근데
for l,r in queries:
for i in range(l,r+1): arr[i]+=1
그냥 이렇게 해줘도 풀리는 문제여따 ..
* 가까운 수 문제에서는
처음에 빈 배열을 하나주고, array를 sort시키는 작업이 필요하다 !
그리고
for i in array:
box.append(abs(i-n))
answer = [array[box.index(min(box))]]
array와 box는 둘다 오름차순이니까 index 순서가 같다는 점을 이용해 코드를 짜면 된다 !
그리고
if len(answer) > 1:
return min(answer)
가장 가까운 수 중에는 더 작은값을 가져오라고 했으니까 min을 써주면 된다 !
나에겐 어려웠던 문제 ,,
* 이차원 배열 대각선 순회하기 문제에서
나는 for문을
for i in range(len(board)):
for j in range(len(board[i])):
이렇게 돌려서 풀었는데,
return sum(board[i][j] for i in range(len(board)) for j in range(len(board[0])) if i + j <= k)
이렇게 이중으로 컴프리헨션이 가능하다는걸 알았다 !
그리고 count =0 / count += board[i][j]는 sum(board[i][j])로 사용할 수 있다는 거 !
* 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 문제에서
나는 처음에
def solution(myString,pat):
answer = ''
for i in myString:
answer += i
if answer.endswith(pat):
if i == answer[-1]:
answer += i
return answer
이렇게 해서 답을 찾으려고 했었는데 실패했다 ㅋ ㅠ
그래서 검색을 해봤는데
내가 잊고 있던 함수를 사용하면 아주 쉽게 풀리는 문제였다.
오른쪽부터 쪼개주는 rsplit 메서드를 이용하면 되는 문제였다.
rsplit(separator, maxsplit)
separator -> 선택. 구분자. (기본값: 공백)
maxsplit -> 선택. 쪼갤 지점 최대 개수.
>> rsplit(pat,1) -> 오른쪽부터 pat를 기준으로 1번만 쪼갠다.
그래서
return myString.rsplit(pat,1)[0] + pat
이렇게 해주면 된다 !
def solution(myString, pat):
return myString[:len(myString) - myString[::-1].index(pat[::-1])]
이런 신박한 답도 있었다 !
* 숨어있는 숫자의 덧셈(2) 문제에서
나는
def solution(my_string):
answer = ''
for i in range(len(my_string)):
if my_string[i].isdigit():
answer += my_string[i]
print(answer)
이렇게까지 밖에 생각해내지 못했는데, (이 코드는 동작안한다 ㅠ)
반대로 생각하면 풀리는 문제여따 ㅠ
if i.isalpha():
my_string = my_string.replace(i," ")
my_string = my_string.split()
내가 생각한 방식으로 문제를 푸신 분이 계셔서 그 답을 가져와봤다 !
def solution(my_string):
s = ''.join(i if i.isdigit() else ' ' for i in my_string)
return sum(int(i) for i in s.split())
이렇게 간단하게 풀 수 있는 문제여따 ㅠ
* 수열과 구간 쿼리 3 문제에서는
arr[i],arr[j] = arr[j],arr[i]
이것만 알면 간단하게 풀 수 있다 !
* 진료순서 정하기 문제에서는
내림차순의 index를 가져오는게 포인트이기 때문에 내림차순을 하는 방법을 아는것이 중요하다 !
sorted(emergency,reverse = True)
이걸하고 이 index를 가져와서 풀면 해결할 수 있다 !
나는
def solution(emergency):
answer = []
emergency1 = sorted(emergency,reverse = True)
for i in emergency:
answer.append(emergency1.index(i)+1)
return answer
이렇게 했는데,
def solution(emergency):
return [sorted(emergency, reverse=True).index(e) + 1 for e in emergency]
이렇게 하면 더 간단하게 코드를 짤 수 있었다 !
* 빈 배열에 추가, 삭제하기 문제에서는
arr[i]값을 어떻게 곱해줄 것인지가 중요한데,
이때는 배열에 append를 해주는것이 아니라 extend를 해줘야한다.
append와 extend의 차이는
<GPT의 설명>
append와 extend는 둘 다 리스트에 요소를 추가하는 메서드입니다. 하지만 그 동작 방식에 차이가 있습니다.
- append: append 메서드는 리스트에 요소를 하나씩 추가합니다. 즉, 인자로 넘긴 요소를 리스트의 끝에 추가합니다.
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # 출력: [1, 2, 3, 4]
2. extend: extend 메서드는 리스트에 다른 리스트의 요소들을 추가합니다. 즉, 인자로 넘긴 리스트의 각 요소를 리스트의 끝에 하나씩 추가합니다.
my_list = [1, 2, 3]
my_list.extend([4, 5, 6])
print(my_list) # 출력: [1, 2, 3, 4, 5, 6]
요약하면, append는 단일 요소를 추가하고, extend는 다른 리스트의 요소들을 추가하는 것입니다.
그렇다고 한다 ! (*^▽^*)
그래서
answer.extend([arr[i]] * arr[i] * 2)
이렇게 extend를 사용해서 코드를 짜야하고, arr[i]도 값 자체를 살려야하기 때문에 배열에 넣어준다.
그리고 else일때는
answer = answer[:-arr[i]]
이렇게 해주면 된다 !
오늘도 넘나 고생해똬 ..!
내일도 열심히 풀어보자고 ~!~
'TIL' 카테고리의 다른 글
230805 오프라인 스터디 & 프로그래머스 문제풀기 & 미니강의 (0) | 2023.08.05 |
---|---|
230804 프로그래머스 문제풀기 + 공부 (0) | 2023.08.05 |
230801 프로그래머스 문제풀기 (0) | 2023.08.02 |
230731 프로그래머스 문제풀기 (0) | 2023.08.01 |
230730 프로그래머스 문제풀기 (1) | 2023.07.31 |