ext = 'sanghoon'
* text[0:3] -> 앞에서 3번째 까지 자르기
* split('') -> 괄호 기준으로 잘라서 배열 담기
* a_list = ['사과','참외','메론']
-> a_lsit[-1] = 가장 마지막 값
-> a_list.sort() = 오름 차순 정렬
-> result = ('사과' in a_list) = True
* dict 자료형
a_dict = {'name':'bob','age':27}
a_dict['height'] = 180 // 추가
print(a_dict) # height : 180 추가된 dict 자료형 출력
* list + dict 형태
people = [{'name':'bob','age':27},
{'name':'john','age':30}]
print(people[0]['name']) # bob
- for문에서 enumerate
for i,person in enumerate(people):
age = person['age']
name = person['name']
print(i,name,age) -> 배열방에서 index처럼 0~길이 -1 만큼 순서가 부여된다!!!
- 주민번호 홀수 = 남자 , 짝수 = 여자 판별 예제
def check_gender(num):
num_check = int(num.split('-')[1][0:1])
if num_check % 2 == 1:
print("남자입니다.")
print(num_check)
else:
print("여자입니다.")
print(num_check)
check_gender("150101-1012345")
check_gender("150101-2012345")
check_gender("150101-4012345")
- 시간 복잡도
👉 입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계
👉 각 줄이 실행되는 것을 1번이라고 생각
- 예시로 계산하는 시간 복잡도
input = [3, 5, 6, 1, 2, 4]
* 최대값 찾기 예제로 보는 시간 복잡도
def find_max_num(array)
for j in array: # array의 길이만큼 아래 연산이 실행
for compare in array: # array의 길이만큼 아래 연산이 실행
if j < compare: # 비교 연산 1번 실행
break
else:
return j
👉 Array의 길이 + Array의 길이 + 비교연산 1번
👉 여기서 array(입력값)의 길이는 보통 N이라고 칭한다.
👉 따라서 N^2 만큼의 시간이 걸렸구나! 라고 생각할 수 있다.
👉 입력 값?? -> 함수에서 크기가 변경될 수 있는 값!!!
👉 N의 수식으로 표현할 것
⭐ 중요사항 : 상수는 생각하지 않고, N만 신경쓸 것!!
👉 ex) 2N+1의 시간 복잡도라면 N의 시간 복잡도라고 생각해도 무관!
- 공간 복잡도
👉 입력값과 문제를 해결하는 데 걸리는 공간과의 상관관계를 말한다.
👉 간단하게 얘기하면 데이터를 할당하는 크기!!
- 예시로 계산하는 공간 복잡도
* 공간 복잡도 최빈값으로 살펴보기(첫번 째 예제)
def find_max_occurred_alphabet(string):
alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
"t", "u", "v", "x", "y", "z"]
max_occurrence = 0
max_alphabet = alphabet_array[0]
for alphabet in alphabet_array:
occurrence = 0
for char in string:
if char == alphabet:
occurrence += 1
if occurrence > max_occurrence:
max_alphabet = alphabet
max_occurrence = occurrence
return max_alphabet
result = find_max_occurred_alphabet
print("정답 = a 현재 풀이 값 =", result("Hello my name is sparta"))
print("정답 = a 현재 풀이 값 =", result("Sparta coding club"))
print("정답 = s 현재 풀이 값 =", result("best of best sparta"))
👉 alphabet_array의 길이 = 26 ,
max_occurrence , max_alphabet,occurence 변수 = 3 ->
total 29의 공간 복잡도가 사용
⭐ 공간 복잡도 -> 상수 = 크게 의미가 없다..
⭐ 따라서 공간 복잡도 보다는 시간 복잡도로 판별할 것!!
- 점근 표기법
👉 알고리즘의 성능을 수학적으로 평가하는 방법
👉 빅 오 : 최악의 성능이 나올 때 까지 얼마나 걸릴지
👉 빅 오메가 : 최고의 성능이 나올 때 까지 얼마나 걸릴지
- 점근 표기법 배열 예제로 찾아보기
input = [3, 5, 6, 1, 2, 4]
def is_number_exist(number, array):
for input_arr in array:
if input_arr == number:
return True
else:
return False
result = is_number_exist(3, input)
print(result)
👉 운이 좋으면 한번만 연산해도 찾을 수 있다. -> 빅 오메가
👉 운이 좋지 않으면 끝까지 가야 찾을 수 있다. -> 빅 오
⭐ 이론 파트 요약
1) 입력값에 비례해서 얼마나 늘어날지 파악해보자!( ex 1 ? N ? N^2 )
2) 공간 복잡도 보다는 시간 복잡도를 더 줄이기 위해 고민하자!
3) 최악의 경우에 시간이 얼마나 소요될지(빅 오)에 대해 고민하자
👉input = [0, 3, 5, 6, 1, 2, 4] 을 왼쪽 부터 차례대로 곱하기와 더하기를 하여 최대값을 구하시오( 수학에서의 사측연산 우선순위가 아닌 왼쪽부터의 연산 우선순위를 가진다. )
input = [0, 3, 5, 6, 1, 2, 4]
def find_max_plus_or_multiply(array):
max_num = 0
for find_num in array:
if find_num <=1 or max_num <=1 :
max_num+=find_num
else:
max_num*=find_num
return max_num
result = find_max_plus_or_multiply(input)
print(result)
👉 포켓몬 선택, 종류가 같으면 1종류로 친다.
👉 6마리의 포켓몬이 있다면 선택은 3마리만 가능(tot/2) 만큼 선택가능
👉 그렇게 선택할 때 최대로 선택할 수 있는 종류의 가짓수를 구해라!
import java.util.HashSet;
class Solution {
public static void main(String[] args) {
Solution sol = new Solution();
int[] a = new int[]{1,2,3,4,5,6};
sol.solution(a);
}
public int solution(int[] nums) {
int n = nums.length/2;
HashSet<Integer> arr = new HashSet<Integer>();
for(int i =0;i<nums.length;i++){
if(arr.size()>=n){
break;
}else{
arr.add(nums[i]);
}
}
System.out.println(arr);
System.out.println(arr.size());
return 1;
}
}
1) 너무 어렵게 생각하지 말자...
2) 꾸준하게 1문제씩 풀자...