학습 기록/코딩 테스트 다짜고짜 풀어보기

[python] 코딩 테스트 입문 문제 풀기 (6)

romi__ 2024. 9. 30. 19:24

/date 24.09.30.

 

- 중간 점검: 100문제 중 60문제 완료

입문 문제 포스트가 10개가 되기 전에 끝나지 않을까... 싶음

 

 

📌 1) 최댓값 만들기 (2)

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(numbers):
    numbers.sort()
    return max(numbers[0] * numbers[1], numbers[-1] * numbers[-2])

 

 

📌 2) 합성수 찾기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(n):
    answer = 0
    for i in range(1, n+1):
        divisor_count = 0
        for k in range(1, i+1):
            if i % k == 0:
                divisor_count += 1
        if divisor_count >= 3:
            answer += 1
            
    return answer

 

✔️ 초반에 코드를 좀 그지같이 짜긴 했지만 접근 방식은 맞아서 기분이 좋다

 

 

📌 3) 중복된 문자 제거

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(my_string):
    s = ''
    for i in my_string:
        if i in s:
            continue
        else:
            s += i
    return s

 

✔️ 처음엔 아래처럼 코드를 짰다.

"".join(set(list(my_string)))

 

✔️ 그런데 이상하게 순서가 바뀌어서 테스트 케이스를 통과하지 못하는거다! (으 열받아) 알고보니 set은 중복된 원소는 제거해 주지만, 순서가 그대로 유지되지 않는다고 한다. 그래서 이 문제는 set을 사용해서는 간단하게 풀이할 수 없다.

 

 

📌 4) 모스부호 (1)

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(letter):
    morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
    }
    answer = ''
    a = letter.split()
    for i in a:
        answer += morse[str(i)]
    return answer

 

✔️ split("기준으로 사용할 문자") : 괄호 안 문자를 기준으로 string을 나눠준다! 비워둘 경우 공백을 기준으로 나눔

 

 

📌 5) 2차원으로 만들기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(num_list, n):
    answer = []
    for i in range(0, len(num_list), n):
        answer.append(num_list[i:i+n])
    return answer

 

 

 

📌 6) 팩토리얼

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import math

def solution(n):
    i = 1
    while math.factorial(i) <= n:
        i += 1
    return i-1

 

✔️ 나만 또 math 모듈에 팩토리얼 계산 함수 있는거 모르고 하나하나 다 쓰려고 했지 에휴

 

 

 

📌 7) 구슬을 나누는 경우의 수

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import math

def solution(balls, share):
    return math.factorial(balls)/(math.factorial(balls-share)*math.factorial(share))

 

✔️ 서로 다른 N개 중 m개 뽑기! 고등학교 확률과 통계 잊지 않았쥬? n! / ((n-m)!*m!)이다.

 

✔️ math.factorial 냉큼 사용했는데 comb이라는 함수도 있단다..ㅎ 아주 간단하게 nCk등의 수식을 계산해줌(combination)

 

 

 

📌 8) A로 B 만들기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(before, after):
    answer = 0
    b = list(before)
    a = list(after)
    for i in after:
        if b.count(i) == a.count(i):
            answer += 1
    if answer == len(after):
        return 1
    else:
        return 0

 

✔️ 풀고 나서 보니까 그냥 sorted로 정렬해서 동일한지 봐도 될 것 같다.

 

 

📌 9) 가까운 수

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(array, n):
    arr = []
    array.sort()
    for i in array:
        arr.append(abs(i-n))
    return array[arr.index(min(arr))]

 

✔️대체 언제쯤 sort()와 sorted()를 한 번에 구분해서 사용할 수 있을까..?

 

 

📌 10) 공 던지기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(numbers, k):
    a = 2*k-1
    while len(numbers) < a:
        numbers.extend(numbers)
    return numbers[a-1]

 

 

✔️ Extend 관련해서 잘 정리된 블로그가 있길래 아카이빙...

https://m.blog.naver.com/wideeyed/221541104629

 

[Python] list append()와 extend() 차이점

Python 리스트에 새로운 원소를 추가하는 방법에는 append(x)와 extend(iterable)가 있고 두 함수의 차이...

blog.naver.com

 

 

/*사족입니다*/

  • 29문제 남았다...!!