카카오 코테 준비 (Python)

Onion·2025년 10월 1일

코테

목록 보기
1/1

카카오 코테 준비...

카카오 지원서를 제출했고 프로그래머스에서 코테를 본다고 연락을 받았다...
그나마 가장 자신 있는 언어인 Python으로 준비를 해보려고 한다

한동안 Python은 쳐다보지도 않았기 때문에 일단 기초부터 양치기로 풀어가면서 뇌를 좀 풀어보려고 한다

풀면서도 이걸 틀리네 싶어서 쪽팔리긴 하네...

프로그래머스 코테

문제 풀이

너무 쉽거나 내가 절대 생각해낼 수 없는 풀이들은 제외하고 오답해두려는 문제들만 정리하려고 한다


코딩테스트 입문

https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc

1. 분수의 덧셈

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

👇❌ 나의 오답

def solution(numer1, denom1, numer2, denom2):
    
    a = numer1*denom2 + numer2*denom1
    b = denom1*denom2
    
    c = 1000
    while (c>1):
        if (denom1 % c == 0) & (denom2 % c == 0):
            a = a // c
            b = b // c
        c -= 1
    
    return [a, b]

import math

👇⭕ 정답

import math

def solution(numer1, denom1, numer2, denom2):
    b = denom1 * denom2
    a = (numer1 * denom2) + (numer2 * denom1)
    
    gcd=math.gcd(a,b)
    a = a // gcd
    b = b // gcd
    
    answer = [a, b]
    return answer

2. 배열 두 배 만들기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요

👇⭕ 나의 정답

def solution(numbers):
    for i in range(len(numbers)):
        numbers[i] = numbers[i]*2
    return numbers

👇⭕⭕⭕ 더 좋은 정답

def solution(numbers):
    return [num*2 for num in numbers]
  • 리스트 컴프리헨션: [표현식 for 항목 in 반복가능객체 if 조건문] 형태

3. 중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

👇⭕ 나의 정답

def solution(array):
    array.sort()
    return array[(len(array)//2)]

4. 최빈값 구하기

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

👇⭕ 나의 정답

def solution(array):
    if len(array) == 1:
        return array[0]
    
    else:
        array.sort()

        count_list = []
        count = 1
        for i in range(len(array)-1):
            if array[i] == array[i+1]:
                count += 1
            else:
                count_list.append(count)
                count = 1
        count_list.append(count)

        array_copy = list(set(array))
        array_copy.sort()
        
        a = array_copy[0]
        max = count_list[0]
        for i in range(1, len(count_list)):
            if max < count_list[i]:
                max = count_list[i]
                a = array_copy[i]
            elif max == count_list[i]:
                a = -1    
        
        return a

5. 짝수는 싫어요

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

👇⭕ 나의 정답

def solution(n):
    
    list = []
    for i in range(1, n+1):
        if i % 2 == 1:
            list.append(i)
    list.sort()            
    return list

👇⭕⭕⭕ 더 좋은 정답

def solution(n):
    return [i for i in range(1, n+1, 2)]

카카오 기출

https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&languages=python3&partIds=58464%2C37527%2C31236%2C25448%2C20069%2C17214%2C12286%2C9317%2C22586%2C18498%2C17931%2C300%2C301&page=1

1. 숫자 문자열과 영단어

https://school.programmers.co.kr/learn/courses/30/lessons/81301

👇⭕ 나의 정답

def solution(s):
    num = []
    for i in range(10):
        num.append(str(i))
    print(num)
    
    eng = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    
    for i in range(10):
        if eng[i] in s:
            s = s.replace(eng[i], num[i])
    
    return int(s)

기억하기

문법

if문 문법

if ~ elif ~ else

if문 활용

if num1 == num2: 
    return 1 
else: 
	return -1

위 아래 코드는 동일

return 1 if num1==num2 else -1

배열

[1, 2, 3] * 2의 결과는 [1, 2, 3, 1, 2, 3]

set형

중복을 제거하는 형은 set()

sort()

return문이나 print문에 sort()를 쓰면 null값이 반환됨

in

  • "seven" in "seveneight" → 참
  • "seveneight" in "seven" → 거짓

replace()

  • "ababab".replace("a", "b") "ababab" 문자열에서 "a"를 "b"로 변경
  • 기본적으로 첫 번째 인자에 해당하는 전체 문자를 변경 (따로 옵션 지정하지 않는다면)
  • 문자열에서 또다른 문자열로만 바꿀 수 있음
    "ababab".replace("a", 1) 불가능
  • 변경 후 재할당 필요 s = s.replace("a", "b")

import

import math

  • math.gcd(a, b) a, b 사이의 최대 공약수 구하기
  • math.lcm(a, b) a, b 사이의 최소 공배수 구하기

최적화

함수의 변수

재사용 되는 함수가 아니라면 함수 내 변수는 최대한 지양할 것 (사용하지 말 것)

리스트 컴프리헨션

[표현식 for 항목 in 반복가능객체 if 조건문] 형태

profile
눈물이 나도 코드를 계속 까보는 양파

0개의 댓글