✅ 오늘 한 것
알고리즘 문제
✏️ 오늘 배운 점
def solution(arr, queries): #나의 풀이
for i in range(len(queries)):
arr[queries[i][0]], arr[queries[i][1]] = arr[queries[i][1]], arr[queries[i][0]]
return arr
def solution(arr, queries): #다른 사람의 풀이
for a,b in queries:
arr[a],arr[b]=arr[b],arr[a]
return arr
리스트 내의 두 요소를 인덱스로 직접 교환하는 방식을 위와 같이 설정하였으나, queries가 리스트 내의 리스트 형식이라 아래와 같이 a,b로 설정하면 앞에 위치한 것은 a, 뒤에 위치한 것은 b인 것을 볼 수 있었다. 이후 리스트에서 사용 가능성을 볼 수 있었기에 인덱스 직접 교환과 리스트 내에서 바로 두 가지의 정보를 받아볼 수 있는 것은 좋다고 생각이 들었다.
def solution(before, after):
return 1 if sorted(before) == sorted(after) else 0
처음에는 그저 뒤로 before 문자열을 뒤집어서 after와 동일하면 1 다르면 0을 반환하는 것으로 이해했지만 오류가 발생해서 문제를 파악해보니 문자열을 재배열하였을 때 after를 만들어낼 수 있는지 확인하는 것이였기에 sorted를 통해 문자열의 각 요소의 개수가 동일하면 after가 가능한 것이기에 sorted를 통해 문제를 해결할 수 있었다.
def solution(arr):
if (len(arr) & (len(arr) - 1)) == 0:
return arr
else:
while (len(arr) & (len(arr) - 1)) != 0:
arr.append(0)
while (len(arr) & (len(arr) - 1)) == 0:
return arr
(len(arr) & (len(arr) - 1)) == 0 을 통해 2의 거듭제곱을 확인할 수 있으며, 리스트의 길이가 2의 거듭제곱이 될 수 있도록 0을 추가하여 2의 거듭제곱이 되었을 때 리스트 arr를 반환하는 코드를 작성하였다.
(len(arr) & (len(arr) - 1)) == 0
는 2진수로 비교를 하는 것이며, len(arr)가 2의 거듭제곱이라면 1000, 100, 10와 같은 예시로 하나의 수만 1을 가지는데 len(arr)-1은 len(arr)가 1000이라면 len(arr)-1은 111가 되기에 &를 비교하였을 때 다른 수와 절대 동일한 1이 존재할 수가 없기에 2의 거듭제곱을 확인할 수 있다.
def solution(arr):
if 2 not in arr:
return [-1]
position = [i for i, v in enumerate(arr) if v == 2]
return arr[position[0]:position[-1]+1]
arr 내에서의 처음 나오는 2와 마지막에 나오는 2까지의 요소를 반환하는 코드를 작성하였다.
만약 arr 내에 2가 존재하지 않다면 [-1]을 반환하고 2가 존재한다면 2가 존재하는 인덱스를 모두 확인하고 처음 인덱스와 마지막 인덱스 +1을 하여 첫 2와 마지막 2의 요소를 반환할 수 있었다.
이때, enumerate를 활용하여 리스트의 index와 value 값을 한번에 확인하며 value가 2일 경우의 index를 모은 리스트를 생성하는 연습을 해볼 수 있었다.
✏️ 오늘의 핵심
enumerate( ), values( ), items( )은 코드 작성에서 많이 사용되며 여러 방면에서 사용된다는 것을 알 수 있다.
📌추가로 해야할 점
SQLD
'품질관리(QAQC) 데이터 부트캠프(본캠프)' 카테고리의 다른 글
| 본캠프_5주차(월)_TIL (0) | 2025.10.13 |
|---|---|
| 연휴(일)_TIL (1) | 2025.10.12 |
| 연휴(금)_TIL (0) | 2025.10.10 |
| 연휴(목)_TIL (0) | 2025.10.09 |
| 연휴(수)_TIL (0) | 2025.10.08 |