왜 갑자기 이런 파트를 적게 되었는가?
알고리즘 공부를 하는 이유를 더 명확하게 하고 효율적으로 공부를 하기 위해.
왜 알고리즘을 배우는가?
문제를 해결하는 절차나 방법을 자세히 설명하는 과정
결국에는 잘 하기 위해 문제에 접근하는법, 해결하는법을 패턴화시키고 이해하는수밖에 없다. 그래서 정리해 보고자 한다.
문제를 직면했을 때 즉시 문제를 해결해야 할 이유가 없다.
시간의 제약이 있더라도 문제를 이해하고 접근하는것이 훨씬 유리하다.
이해가 되지 않는다면 스스로에게 질문을 통해 조사를 진행할 수 있다.
아래 나오는 패턴들의 이름은, 공식적인 이름이 아닐 수 있습니다. 편의를 위해 강사님이 붙혀놓은 이름입니다.
def valid_anagram(str1,str2):
if len(str1) != len(str2):
return False
temp_str1 = {}
temp_str2 = {}
for str in str1:
if str not in temp_str1:
temp_str1[str] = 1
else:
temp_str1[str] += 1
for str in str2:
if str not in temp_str2:
temp_str2[str] = 1
else:
temp_str2[str] += 1
if temp_str1 == temp_str2:
return True
else: return False
# 각각 딕셔너리로 만들면, 이중for문으로 O(N^2)의 시간을 사용할 필요 없이 O(N)으로 끝낼 수 있다.
# 더 간단한 풀이법이 있을 것 같은데, 파이썬에대한 숙련도가 낮아 지금은 이계 최선으로 보인다...
function validAnagram(str1, str2) {
if (str1.length !== str2.length) {
return false;
}
const tempStr1 = {};
for (let str of str1) {
if (!tempStr1[str]) {
tempStr1[str] = 1;
} else {
tempStr1[str]++;
}
}
for (let str of str2) {
//js에서는 0 == false 이므로
if (!tempStr1[str]) {
return false;
} else {
tempStr1[str] -= 1;
}
}
return true;
}
def count_unique_values(arr):
if len(arr) == 0:
return print(0)
curr = 0
for i in range(1,len(arr)):
if arr[curr] != arr[i]:
curr += 1
arr[curr] = arr[i]
return print(curr+1)
function countUniqueValues(arr) {
if (arr.length === 0) {
return 0;
}
let curr = 0;
for (let i = 1; i < arr.length; i++) {
if (arr[curr] !== arr[i]) {
curr++;
arr[curr] = arr[i];
}
}
return curr + 1;
}
def max_subarray_sum(arr,num):
if len(arr) < num:
return None
temp_sum = 0
max_sum = 0
for i in range(0,num):
max_sum += arr[i]
temp_sum = max_sum
for i in range(num, len(arr)):
temp_sum = temp_sum - arr[i-num] + arr[i]
max_sum = max(max_sum, temp_sum)
return max_sum
function maxSubarraySum(arr, num) {
let maxSum = 0;
let tempSum = 0;
if (arr.length < num) return null;
for (let i = 0; i < num; i++) {
maxSum += arr[i];
}
tempSum = maxSum;
for (let i = num; i < arr.length; i++) {
tempSum = tempSum - arr[i - num] + arr[i];
maxSum = Math.max(maxSum, tempSum);
}
return maxSum;
}
정리 너무 잘하셨네요
생각하신점들이 녹혀져있는 글이라 너무 좋습니다
고생많으셨어요!