[프로그래머스] 기초 코딩테스트 참고 [Python]

원준·2023년 4월 19일
0

코딩 테스트

목록 보기
2/18

1. split로 잘라내기 후에 바로 for 함수에 사용할수 있는 방법이다.

  • := 사용해 변환하면서 반환하기 가능한 수식, 3.8부터 사용 가능하다고 되어잇다.
for i in range(len(s := s.split(" "))):
        answer += int(s[i]) if s[i] != "Z" else -int(s[i-1])

2. 특정 수의 소인수분해를 해서 중복된 수를 빼는 것이다.

  • 처음에는 sorted(list(set(answer)))를 사용했지만, 5의 배수가 남아있는 상황이 나와 for을 하나 더 만들어 소수인지 판별하게 했다.
  • 더 좋은 방법이 있을 것 같다.
def solution(n):
    answer = []
    
    number = 2
    while number < n+1:
        if n % number == 0:
            for i in range(1, number):
                if i+1 == number:
                    answer.append(number)
                elif number % (i+1) == 0:
                    break
            n //= number
        number += 1

    return answer

3. 배열로 받은 공던지기 알고르짐인데 한줄로 간단하게 수학적으로 표현이 가능하다.

  • 여러줄을 작성해 효율이 별로 일수 있으나, 다른 새로운 방법을 알아서 좋다.
  • 수학적 접근이 중요한 것 같다.
# 1줄 코딩 참고 용
def solution(numbers, k):
    return numbers[2 * (k - 1) % len(numbers)]
# 내가 풀이한 내용
def solution(numbers, k):
    answer = 0
    
    for i in range(1, k):
        answer += 2
        if answer >= len(numbers):
            answer -= len(numbers)
  
    return numbers[answer]

4. 배열안 무작위 숫자에 관하여 7이 포함되는 수를 찾는것인데, 한줄로 가능하다...

# 1줄 코딩 참고 용
str(array).count('7')
  • 내가 했던 방법으로 해야하는줄 알았지만, 더욱 간단하게 가능하다는게 신기하다.
# 내가 한 코딩
def solution(array):
    answer = 0
    for i in array:
        for n in str(i):
            if int(n) % 7 == 0 and int(n) != 0:
                answer += 1
    return answer

5. enumerate 함수 사용

  • enumerate를 사용하면 변환하면서 루프를 돌릴 수 있다고 하는데 해당 방법에 대해 알아 봐야겠다.
for num, eng in enumerate(["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]):
        numbers = numbers.replace(eng, str(num))

6. 계산식으로 된 문자열을 계산 하는 방법

# 1코딩 참고 용
sum(int(i) for i in my_string.replace(' - ', ' + -').split(' + '))
  • 아래는 내가 했던 방법이나 코드를 좀더 줄일수 있다.
  • 수학적 접근이 더 필요하다는게 어려운 것 같다.
# 내가 한 코딩
 for i in range(0, len(my_string := my_string.split(' ')), 2):
        if my_string[i-1] == "-":
            answer -= int(my_string[i])
        else:
            answer += int(my_string[i])

7. math 함수 없이 하는 방법이다.

  • 음수를 활용해 소수점을 올리는 것이 가능하다.
  • 해당 list의 범위를 넘어서도 슬라이싱은 오류를 내지 않는다.
answer = [my_str[i*n:i*n+n] for i in range(-(-len(my_str)//n))]

8. math를 활용해 서로 다른 n 개중 m개를 뽑는 공식을 사용 가능하다.

# math 활용 참고 용
math.comb(balls, share)
# math없이 했던 내가 한 방법
def Factpor(inNu):
    number = 1
    for i in range(inNu):
        number *= i+1
    return number

def solution(balls, share):
    n = Factpor(balls)
    m = Factpor(share) * Factpor(balls - share)
    
    return n / m

9. 누르는 키보드에 따라서 좌표를 이동 시키는 함수

  • 각자의 문자열을 토데로 따로 값을 주었던 방식이다.
# 내가 한 코딩
def solution(keyinput, board):
    answer = [0,0]
    
    for key_str in keyinput:
        if key_str == 'right' and answer[0] < int(board[0]/2):
            answer[0] += 1
        elif key_str == 'left' and answer[0] > -int(board[0]/2):
            answer[0] -= 1
        elif key_str == 'up' and answer[1] < int(board[1]/2):
            answer[1] += 1
        elif key_str == 'down' and answer[1] > -int(board[1]/2):
            answer[1] -= 1
            
    
    
    return answer
  • 입력 받는 값이 정해져 있을 때, 딕셔너리으로 만든 후 좌표처럼 하면 좀 더 가독성이나 활용 측면에서 좋을것 같다.
# 코딩 참고 용
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]

10 .2차 배열에서 해당 리스트에 특정 위치에 max와 min을 사용할수 있다.

# 코딩 참고 용
(max(dots)[0] - min(dots)[0])*(max(dots)[1] - min(dots)[1])

11. := 를 활용해 비교와 동시에 값을 할당하면서 비교하는 연산자

# return에 if와 else를 활용하는것도 가능하다.
    if db_pw := dict(db).get(id_pw[0]):
        return "login" if db_pw == id_pw[1] else "wrong pw"
profile
공부해보자

0개의 댓글