python3 프로그래머스 lv1 풀이 팁 공유
python으로 프로그래머스 lv1 풀이하는 팁을 포스팅 합니다.
개발자를 채용하는 대부분의 회사들, 특히 IT기업은 코딩 테스트를 활용한다.
백준, 프로그래머스 등 알고리즘을 풀수 있는 사이트는 많지만
프로그래머스의 장점은 카카오 채용문제 제공,
그리고 함수 방식으로 알고리즘을 풀 수 있다는 점,
UI가 깔끔하고 중간에 질문 활용이 가능하며
SQL만 할 수 있도록 문제 구분이 잘 되어 있다는 점이라고 생각된다.
이번 포스팅에서는 python3로 알고리즘 문제들을 풀 때
도움이 될만한 팁을 공유 하려고 한다.
먼저 LV1부터 공유하고, 순차적으로 올라가는 방식을 사용하려고 한다.
특정 한 문제만 풀기 위해서 사용되는 라이브러리는 제외하고 서술합니다.
ex) 시저 암호(string), 문자열 정렬(itemgetter), 소수 만들기(combinations) 등
1.정렬 방법
sorted(list내역, reverse=False)
DataFrame에서는 뒤에 .sort_values()를 하면 되지만
lv1 수준에서는 list가 대부분 나오기 때문에
파이썬 내장 함수의 sorted를 활용해서 정렬을 해야지
풀기 수월한 문제들이 많이 나온다.
2.count 방법
방법은 크게 2가지 이다.
list 뒤에 .count(‘내용’)을 사용해서 각 count 값을 가져오거나
collections 라이브러리 내에 있는 Counter를 활용 하는 방법이다.
Counter는 주어진 내역(list, DataFrame 열 등)의
count를 dictionary 형태로 반환한다.
추가로 .keys(), .values()를 통해서 count 되는 내역들만 가져오거나
count 된 값을 따로 출력할 수 있다.
from collections import Counter
list1 = ['a','b','c','a','b']
temp = Counter(list1)
temp
Counter({'a': 2, 'b': 2, 'c': 1})
만약 객체로 할당해두면 객체 뒤에 [‘내용’] 을 넣는 방식으로
count 된 수를 따로 가져올 수도 있다.
temp['a']
2
3.나눗셈
나눗셈의 몫만 반환 받고 싶은 경우 //를 사용하면 되고
나머지만 반환 받고 싶다면 %을 사용하면 된다.
두 개 다 반환 받고 싶은 경우 divmod(m,n)을 사용하면 된다.
첫 번째에 몫이 나오고, 두 번째에 나머지가 나오는 방식이다.
4.List 활용법
list를 활용을 많이 하기에,
기본적인 인덱싱(0부터 시작, 끝 부터 하려면 -1부터 등),
슬라이싱(: 활용해서 자르는 방법) 등도 잘 알아 두어야 하며,
append(맨 끝에 추가), insert(index, 값),
del list[index](특정 위치 삭제),
list.remove('특정 값')(처음 것만 삭제),
del list[list.index('특정 값')] (drop과 동일 효과, 처음 것만 삭제),
list.pop(index)(특정 위치의 값을 반환 + list 내에서는 삭제)
list1.extend(list2) (list1로 결합이 될 수 있도록 list2를 결합)
등의 list 내의 값을 추가하거나 제외하는 방법도 숙지 하여야 한다.
cf) .copy() (리스트 복사, 원본 보존에 유용),
.reverse() (현재 리스트 뒤집기, 반환 아님)
5.List 결합
’‘.join([‘a’, ‘b’, ‘c’])
해당 문장은 list 안의 내용을 공백을 두지 않고 결합시키는 것입니다.
–> 결과 : ‘abc’
.. 대신에 ., .을 둔다면
–> 결과 : ‘a, b, c’
다만, join 안에 들어가는 list는 숫자가 들어가면 오류가 발생한다.
그렇기에 각 숫자들을 먼저 str로 변환을 하고 진행하여야 한다.
6.for, while 등 반복 구문 + enumerate + list(zip())
단순 for문은 많이 쓰일 것이고
list comprehension으로 나타내서 해결해도 된다.
자세한 내용은 해당 포스팅 으로 대체 하도록 하겠다.
while은 수를 정해두지 않고 특정 조건이 끝날때까지 해야되므로 필요하다.
마지막으로, 보통은 for i in list1 : 로 하지만
한 번에 묶어서 하고 싶은 경우라면
for i, j in list(zip(list1, list2)):
처럼 list(zip())을 활용하면 된다.
enumerate는 맨 앞 i에 할당이 되며 0부터 순서대로 추가 된 값을 반환 한다.
for i, j in enumerate(list1):
위처럼 사용 하면 된다.
만약 이 둘을 합치고 싶다면
for i, (j, k) in enumerate(list(zip(a, a))):
처럼 뒤에 둘을 묶어주고 추가로 괄호 처리를 해서 구분을 해주어야 한다.
7.정규식(카카오 문제)
기초 연습문제가 아닌 카카오와 관련된 문제 몇 개는 정규식을 활용하는 것을 요구한다.
정규식을 쓰지 않아도 해결이 가능하지만, 코드가 더 복잡해지고
애초에 복잡한 정규식 사용을 요구하지 않기에
lv1부터 공부를 해 두는 것을 추천한다.
개인적으로 카카오 lv1은 사실상 프로그래머스 lv2 이상 정도라고 생각된다.
정규식을 활용하는 방법은 다음 포스팅 로 대체 하겠다.