본문 바로가기

코딩테스트

프로그래머스 level0 풀이 참고용

Q. 정수 n이 주어질 때, n 이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

 

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

 

Point! : 한번에 배열을 sum을 활용해 더하고 range안에 (시작, 끝, 커지는 수) 순으로 넣을 수 있는걸 잊지 말기!


Q. 정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는지를 return 하도록 solution함수를 완성해보세요.

 

def solution(array, n):
    answer = array.count(n)
    return answer

 

Point! : count()를 이용해 해당 문자가 배열 안에 몇개 있는지 셀 수 있다!


Q. 문자열 배열 strlist가 매개변수로 주어질 때 strlist 각 원소의 길이를 담은 배열을 return 하도록 solution함수를 완성해주세요.

 

def solution(strlist):
    answer = list(map(len, strlist))
    return answer

 

Point! : map을 사용하면 한번에 할 수 있음

 


문자열 원하는 만큼 추가할 때

 

def solution(my_string, n):
    return ''.join(i*n for i in my_string)

 

join을 쓰면 좀 더 쉽게 할 수 있음

 


 

[표현식 for 항목 in 반복가능객체 if 조건문] 형태를 "리스트 컴프리헨션"

 


 

Q. 모음제거

 

def solution(my_string):
    return my_string.translate({ord(letter): None for letter in 'aeiou'})

 

문자열.translate({ord(letter): None for letter in '삭제하고싶은알파벳들'})

ord() 를 사용해서 원하는 문자열 제거 가능

 

def solution(my_string):
    return "".join([i for i in my_string if not(i in "aeiou")])

 

join을 이용한 다른 방법도 있음 ->이건 배열에 aeiou가 아닌거만 새로 넣어서 하는 방법!

 


 

Q. 숫자만 뽑아서 더하기

 

def solution(my_string):
    return sum(int(i) for i in my_string if i.isdigit())

 

isdigit()을 사용해 숫자인지 판단 가능

 


 

Q. 제곱수인지 확인해서 return 하기

 

import math
def solution(n):
    answer = 0
    if math.sqrt(n).is_integer()==True : 
        return 1
    else: 
        return 2

다른방법

def solution(n):
    return 1 if (n ** 0.5).is_integer() else 2

 

Q. 가위바위보 이기기

 

def solution(rsp):
    d = {'0':'5','2':'0','5':'2'}
    return ''.join(d[i] for i in rsp)

 


 

Q. 특정 배수의 위치의 알파벳만 가져오기

 

def solution(cipher, code):
    return cipher[code-1::code]

 

[code-1::code]가 뭔지 생각해보기

 


 

Q. 문자로 들어간 숫자 리스트를 최대/최솟값 순서대로 출력하기

 

def solution(s):
    s = list(map(int,s.split()))
    return str(min(s)) + " " + str(max(s))

 

list 와 map 사용하는거, min(), max() 사용하는거 알아두기

 


 

Q. 맨 처음만 대문자로 하고싶을 때

 

def Jaden_Case(s):
    answer =[]
    for i in range(len(s.split())):
        answer.append(s.split()[i][0].upper() + s.split()[i].lower()[1:]) 
    return " ".join(answer)

 

[1: ] 알아두자!

 

 


 

Q. 모스 부호 소문자로 치환하기

 

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'
    }

    return ''.join([morse[i] for i in letter.split(' ')])

 

[ : ] 쓰는 방법 기억하기!!!(치환하는거)

 


 

Q. 문자열 앞뒤 뒤집어서 같은거 만들 수 있는지 비교

 

def solution(before, after):
    answer = 0
    before = sorted(before)
    after = sorted(after)
    if before == after:
        answer = 1
    return answer

 

sorted()를 사용해 되는지 해보기!

문자열의 경우 sort()는 안된다~

 


 

Q. 한 번만 등장한 문자

 

def solution(s):
    return ''.join(sorted(i for i in s if s.count(i) == 1))

 

'한 번만' 이므로 count를 사용해 1인것만 추가하기!

 


 

Q. 이진수의 덧셈

 

def solution(bin1, bin2):
    a = int(bin1,2)
    b = int(bin2,2)
    answer = bin(a+b)
    return answer[2:]

 

answer[2: ] 이면 index위치 2부터 출력

 

Q. 5C2 등의 수학문제 푸는 방법 -  구슬을 나누는 경우의 수

 

import math


def solution(balls, share):
    return math.comb(balls, share)

 

math 를 임포트해 comb를 사용하면 된다. 물론 for문을 사용해서 풀어도 무방함!

 


 

Q. 캐릭터의 좌표

 

def solution(keyinput, board):
    x_lim,y_lim = board[0]//2,board[1]//2
    move = {'left':(-1,0),'right':(1,0),'up':(0,1),'down':(0,-1)}
    x,y = 0,0
    for k in keyinput:
        dx,dy = move[k]
        if abs(x+dx)>x_lim or abs(y+dy)>y_lim:
            continue
        else:
            x,y = x+dx,y+dy

    return [x,y]

 

 move = {'left':(-1,0),'right':(1,0),'up':(0,1),'down':(0,-1)}

이 부분을 잘 알아두자!

 

 


 

Q. 분모가 다른 분수의 계산 기약분수로 나타내기

 

import math

def solution(denum1, num1, denum2, num2):
    denum = denum1 * num2 + denum2 * num1
    num = num1 * num2
    gcd = math.gcd(denum, num)
    return [denum//gcd, num//gcd]

 

gcd(최대공약수)