내가 파이썬으로 코딩테스트를 보는 이유는 매우 간단하다.
코드를 적게 써도 되기 때문.
문자열과 리스트 등을 직관적으로 다룰 수 있기 때문이다.
문제 5개를 보면서 예를 들어보려고 한다. 문제는 프로그래머스에서 가져옴
문제 1.
정수를 담은 이차원 리스트, mylist 가 solution 함수의 파라미터로 주어집니다. mylist에 들은 각 원소의 길이를 담은 리스트를 리턴하도록 solution 함수를 작성해주세요.
엄청 쉬운 문제다.
아마 보통은 어떤 언어로 풀든 for문을 돌면서 중첩된 리스트의 길이를 구해서 새로운 빈 리스트에 한 개씩 값을 넣는 형태로 코딩을 할 것이다. (아래처럼)
def solution(mylist):
answer = []
for m in mylist:
answer.append(len(m))
return answer
그런데 파이썬을 제대로 활용하면 아래처럼 간결하게 코드를 짤 수 있다.
def solution(mylist):
answer = [len(x) for x in mylist ]
return answer
문제 2.
정수를 담은 리스트 mylist를 입력받아, 이 리스트의 원소 중 짝수인 값만을 제곱해 담은 새 리스트를 리턴하는 solution함수를 완성해주세요. 예를 들어, [3, 2, 6, 7]이 주어진 경우 2의 제곱과 6의 제곱을 담은 리스트인 [4, 36]을 리턴해야합니다.
이것도 매우 쉬운 문제다. list를 for문으로 돌면서 짝수이면 answer리스트에 제곱을 해서 넣으면 된다.
아래처럼 for문과 if문을 섞어서 쓰겠지?
def solution(mylist):
answer = []
for i in mylist :
if i % 2 == 0:
answer.append(i**2)
return answer
하지만 파이썬을 더 활용한다면 아래처럼 짤 수 있다.
def solution(mylist):
answer = [number**2 for number in mylist if number % 2 == 0]
return answer
겁나 간단~
문제 3.
Swap. a와 b의 값을 바꿀 때 어떻게 하는가?
temp = a
a = b
b = temp
보통은 tmp변수 하나 따서 할 것이다.
하지만 파이썬은 그럴 필요가 없다.
a, b = b, a
이렇게 하면 된다. ㅋㅋㅋㅋ
문제 4.
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
이런 문제는 자바로 풀려면 sort의 compare 함수를 오버라이드 해서 써야한다고 알고 있다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
if(s1.charAt(n) > s2.charAt(n)) return 1;
else if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2);
else if(s1.charAt(n) < s2.charAt(n)) return -1;
else return 0;
}
});
return strings;
}
}
(출처는 프로그래머스)
하지만 파이썬에는 내장된 sort함수에 lambda를 활용하여 엄청 쉽게 풀 수 있다.
def solution(strings, n):
answer = []
strings.sort()
answer = sorted(strings, key=lambda x: x[n])
return answer
마지막으로 문제 5.
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
class Solution {
public int solution(int n) {
String a = "";
while(n > 0){
a = (n % 3) + a;
n /= 3;
}
a = new StringBuilder(a).reverse().toString();
return Integer.parseInt(a,3);
}
}
자바와 파이썬으로 푸는 방법은 거의 똑같이 할 수 있다.
하지만 함수들이 훨씬 직관적이다. StringBuilder같은 걸 사용하지 않아도 된다.
list.reverse()는 파이썬에서 list[::-1] 로 표현할 수 있다.
def solution(n):
answer = ''
while n > 0:
answer += str(n % 3)
n //= 3
return int(answer, 3)
알고리즘을 푸는데에 내장함수를 의존하는 것이 꼭 좋은 것은 아니지만,
타임어택이 있는 시험에서 별다른 고민 없이 풀 수 있다면 얼마나 좋은가!
그래서 나는 파이썬을 사용하여 코테를 푼다.
-끝-
'발표 스터디' 카테고리의 다른 글
이벤트 – 버블링과 캡처링 (0) | 2022.04.19 |
---|---|
리액트의 Virtual DOM 은 도대체 뭐가 좋다는걸까? (0) | 2022.04.19 |
자바스크립트 Promise란 (0) | 2022.04.19 |
JavaScript의 비동기 (0) | 2022.04.18 |
자바스크립트의 함수 (0) | 2022.04.04 |