[Programmers] 키패드 누르기 / 정수 제곱근 판별 / 제일 작은 수 제거하기 / 짝수와 홀수 (python)

yourmean·2021년 2월 9일
0

Algorithm - Programmers

목록 보기
8/13
post-thumbnail

🌴 키패드 누르기

문제 링크

해결 전략

numbers : 순서대로 누를 번호가 담긴 배열
hand : 왼손잡이(left)인지 오른손잡이(right)인 지를 나타내는 문자열


  1. 주어진 키패드 모습은 다음과 같으므로,
123
456
789
*0#

아래와 같이 좌표 부여

[0,0][0,1][0,2]
[1,0][1,1][1,2]
[2,0][2,1][2,2]
[3,1]
  1. 누를 번호가 왼쪽(1,4,7), 오른쪽(3,6,9)인 경우
    주어진 조건에 맞게 tmp=L,R 부여 후 손가락 위치 재부여
  2. 누를 번호가 가운데(2,5,7,0)인 경우
    현재 왼손(l)/오른손(r) 위치에서 누를 번호(n)까지 이동거리 구한 후
    3-1. 거리가 다른 경우, 주어진 조건에 맞게 tmp=L,R 부여 후 손가락 위치 재부여
    3-2. 거리가 같은 경우, tmp=hand의 첫문자(l,r)에 upper()한 값
  3. 차례대로 answer에 tmp값 추가해주고 return

Source Code

def solution(numbers, hand):
    answer = ''
    l,r= [3,0], [3,2] #초기 손가락 위치
    
    #키패드
    keys=[[3,1],
          [0,0],[0,1],[0,2],
          [1,0],[1,1],[1,2],
          [2,0],[2,1],[2,2]]
    
    for n in numbers:
        #왼쪽 열
        if n in [1,4,7]:
            tmp='L'
            l=keys[n]
        #오른쪽 열
        elif n in [3,6,9]:
            tmp='R'
            r=keys[n]
        #가운데 열
        else:
            # 왼 오 거리
            l_dist= abs(keys[n][0]- l[0]) + abs(keys[n][1]- l[1])
            r_dist= abs(keys[n][0]- r[0]) + abs(keys[n][1]- r[1])
            if l_dist!=r_dist: #거리다를때
                if l_dist<r_dist:
                    tmp='L'
                    l=keys[n]
                else:
                    tmp='R'
                    r=keys[n]
            else: #거리 동일
                tmp= hand[0].upper()
                if tmp=='L':
                    l=keys[n]
                else:
                    r=keys[n]
        answer+= tmp

    return answer

🌴 정수 제곱근 판별

문제 링크

해결 전략

n : 1이상, 50000000000000 이하인 양의 정수

  1. tmp에 제곱근(n) 저장하고
  2. int를 취해 준 값과 동일하면 제곱근을, 아니라면 -1 return

Source Code

def solution(n):
    tmp = n**(1/2)
    return (tmp+1)**2 if int(tmp)==tmp else -1

🌴 제일 작은 수 제거하기

문제 링크

해결 전략

arr : 길이 1 이상인 배열

  1. min(arr) 제거 후 return
  2. 최초 arr의 길이가 1인 경우 [-1] return

Source Code

def solution(arr):
    arr.remove(min(arr))
    return arr if arr!=[] else [-1]


🌴 짝수와 홀수

문제 링크

해결 전략

num : int 범위의 정수, 0은 짝수로 취급

  1. 2로 나눈 나머지 1이면 Odd, 아니면 Even return

Source Code

def solution(num):
    return 'Odd' if num%2!=0 else 'Even'
profile
𝐼 𝑒𝑖𝑡ℎ𝑒𝑟 𝑤𝑖𝑛 𝑜𝑟 𝑙𝑒𝑎𝑟𝑛 💪🏻

0개의 댓글