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 이상 정도라고 생각된다.

정규식을 활용하는 방법은 다음 포스팅 로 대체 하겠다.