발표 스터디

내가 파이썬으로 코딩테스트를 보는 이유

개발자R 2022. 5. 4. 16:51
반응형

내가 파이썬으로 코딩테스트를 보는 이유는 매우 간단하다.

코드를 적게 써도 되기 때문.

문자열과 리스트 등을 직관적으로 다룰 수 있기 때문이다.

 

문제 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)

 

알고리즘을 푸는데에 내장함수를 의존하는 것이 꼭 좋은 것은 아니지만,

타임어택이 있는 시험에서 별다른 고민 없이 풀 수 있다면 얼마나 좋은가!

그래서 나는 파이썬을 사용하여 코테를 푼다.

 

-끝-

반응형