공부하는 법
자신있는 주언어를 하나 정해서 연습하라.
※ 실제 코테에서 파이썬, 자바스크립트, C++ 제일 많이 쓴다.
파이썬은 프로그램을 돌릴 때 실행하는 시간의 제약이 없다.
어떤 데이터 타입이나, 메서드 등을 볼 때, 순서보장이 되는지 등을 '기억'하려 한다기보다, '왜' 그런지를 파고들 것.
애매하게 이해하는 것이 더 위험하다. 확실히 짚고 넘어가라.
코딩 테스트 준비에 앞서
알고리즘이 강점이 된다면, 문제를 쉽고 빠르게, 간결하게 푸는 것이 풀어나갈 확률이 높다.
프로그램의 본질과도 직결되는 부분!
실제 코딩 테스트에서는 라이브러리 등 없이 코딩을 하게 된다.
기본 테크닉을 익히는 데 중점 두기!
'자주 쓰는 함수/문법은 암기하자'
> 나의 풀이 (splice) >> 원본을 바꿔서 통과 안됨.
const solution = function (numbers, num1, num2) {
let answer = [];
answer = numbers.splice(num1, num2);
return answer;
};
console.log(solution([1, 2, 3, 4, 5], 1, 3));
> 나의 풀이 2 (slice)
const solution = function (numbers, num1, num2) {
return numbers.slice(num1, num2 + 1);
};
console.log(solution([1, 2, 3, 4, 5], 1, 3));
> 다른 풀이
function solution(numbers, num1, num2) {
let answer = [];
for (let i = num1; i < num2 + 1; i++) {
answer.push(numbers[i]);
}
return answer;
}
> 다른 풀이 2
function solution(numbers, num1, num2) {
return numbers.filter((n, i) => num1 <= i && i <= num2);
}
console.log(solution([1, 2, 3, 4, 5], 1, 3));
> 나의 풀이 ( if )
function solution(dot) {
const x = dot[0];
const y = dot[1];
let answer = 0;
if (x > 0 && y > 0) {
answer = 1;
} else if (x < 0 && y > 0) {
answer = 2;
} else if (x < 0 && y < 0) {
answer = 3;
} else {
answer = 4;
}
return answer;
}
console.log(solution([2, 4]));
console.log(solution([-7, 9]));
> 다른 풀이
function solution(dot) {
const [num,num2] = dot;
const check = num * num2 > 0;
return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}
map
map을 실행한 값을 출력할 시 왜 list로 감싸야 될까?
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '청소년'
result = map(check_adult, people)
print(list(result))
# ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']
lambda
lambda 매개변수: (조건), 리스트명
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
print(list(result))
따로 함수를 만들지 않아도 된다.
result = map(lambda person: ('성인' if person['age'] > 20 else '청소년'), people)
result = filter(lambda person: person['age'] > 20, people)
result = filter(lambda x: x['age'] > 20, people)
filter
def check_adult(person):
return person['age'] > 20
result = filter(check_adult, people)
print(list(result))
def cal(a, b):
return a+2*b
result = cal(1, 2)
# 매개변수값을 지정할 수 있다.
result = cal(a=1, b=2)
# 지정하면, 순서를 안맞춰줘도 된다.
result = cal(b=2, a=1)
print(result)
*args
def cal3(*args):
for name in args:
print(f'{name} 밥먹어라~')
cal3('영수', '철수', '영희')
**kwargs
def cal4(**kwargs):
print(kwargs)
cal4(name='bob', age=30, height=180)
# {'name': 'bob', 'age': 30, 'height': 180}
같은 속성을 가진 여러 개의 딕셔너리를 만들어야 할 때?
예를 들어, 많은 몬스터의 HP를 관리해야한다고 하면, 클래스를 이용해서 속성을 한 군데에서 관리해 줄 수 있다.
이때 클래스를 이용해 만들어낸 딕셔너리를 인스턴스라고 한다.
class Monster():
hp = 100
alive = True
def damage(self, attack):
self.hp = self.hp - attack
if self.hp < 0:
self.alive = False
def status_check(self):
if self.alive == True:
print('살았다')
else:
print('죽었다!')
# m1을 인스턴스다 라고 부른다. 예를 들어 여기에선 몬스터 한 마리다 라고 생각하면 쉽다.
m1 = Monster()
m1.damage(150)
m1.status_check()
m2 = Monster()
m2.damage(90)
m2.status_check()
✍️ 최댓값 찾기
Q. 다음과 같이 숫자로 이루어진 배열이 있을 때, 이 배열 내에서 가장 큰 수를 반환하시오.
input = [3, 5, 6, 1, 2, 4]
# 나의 풀이
def find_max_num(array):
max_num = 0;
# 이 부분을 채워보세요!
for num in array:
if int(num) > max_num:
max_num = num
return max_num
# 강의 풀이
def find_max_num(array):
for num in array:
for compare_num in array:
if num < compare_num:
break
else:
return num
# 강의 풀이 2
def find_max_num(array):
max_num = array[0]
for num in array:
if num > max_num:
max_num = num
return max_num
result = find_max_num(input)
print(result)
✍️ 최빈값 찾기
Q. 다음과 같은 문자열을 입력받았을 때, 어떤 알파벳이 가장 많이 포함되어 있는지 반환하시오
str.isalpha()
ord()
print(ord('a')) # 97 ('a'의 아스키값)
print(ord('a') - ord('a')) # 97-97 -> 0
print(ord('b') - ord('a')) # 98-97 -> 1
def find_alphabet_occurrence_array(string):
alphabet_occurrence_array = [0] * 26
for str in string:
if not str.isalpha():
continue
arr_index = ord(str) - ord("a")
alphabet_occurrence_array[arr_index] += 1
return alphabet_occurrence_array
print(find_alphabet_occurrence_array("hello my name is sparta"))
input = "hello my name is sparta"
# 나의 풀이
def find_max_occurred_alphabet(string):
alphabet_occurrence_array = [0] * 26
for str in string:
if not str.isalpha():
continue
arr_index = ord(str) - ord("a")
alphabet_occurrence_array[arr_index] += 1
count = alphabet_occurrence_array[0]
for num in alphabet_occurrence_array:
if num > count:
count = num
max_index = alphabet_occurrence_array[count] + ord("a")
return chr(max_index)
result = find_max_occurred_alphabet(input)
print(result)
# 강의 풀이
def find_max_occurred_alphabet(string):
alphabet_occurence_array = [0] * 26
for char in string:
if not char.isalpha():
continue
arr_index = ord(char) - ord('a')
alphabet_occurence_array[arr_index] += 1
max_occurence = 0
max_alphabet_index = 0
# 가장 큰값의 인덱스 구하기
for index in range(len(alphabet_occurence_array)):
## range함수는 특정 구간의 숫자의 범위를 만들어주는 함수
# print(index)
# index 0 -> alphabet_occurrence 3
alphabet_occurrence = alphabet_occurence_array[index]
if alphabet_occurrence > max_occurence:
max_occurence = alphabet_occurrence
max_alphabet_index = index
return chr(max_alphabet_index + ord('a'))
result = find_max_occurred_alphabet(input)
print(result)