Python

[실무]프로그래머스 Python3 코딩테스트 입문(61~100문제)

노력하는 백곰 2024. 8. 7. 09:14

■ 출처

- 코딩테스트 : Python3 / 코딩테스트 입문 / 모든 상태 체크 / 61~100문제 

https://school.programmers.co.kr/learn/challenges?order=recent&statuses=unsolved%2Csolving%2Csolved%2Csolved_with_unlock&languages=python3&partIds=33882&page=1

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

 

■ 연습문제

61. 2차원으로 만들기

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

 


62. 점의 위치 구하기

def solution(dot):
    x_val = dot[0]
    y_val = dot[1]
    if (x_val > 0) and (y_val > 0): 
        return 1
    elif (x_val < 0) and (y_val > 0): 
        return 2
    elif (x_val < 0) and (y_val < 0): 
        return 3
    elif (x_val > 0) and (y_val < 0): 
        return 4

 

 

63. 구슬을 나누는 경우의 수

factorial() 함수 : 1부터 n수까지 모든 수의 값들을 곱한 함수
- 예시, 
   from math import factorial
   print(factorial(1)) #1
   print(factorial(2)) #1*2
   print(factorial(3)) #1*2*3
   print(factorial(4)) #1*2*3*4
   print(factorial(5)) #1*2*3*4*5

from math import factorial

def solution(balls, share):
    #분자: 전체 수!
    numerator = factorial(balls)                              
    #분모: (전체 수-뽑을 수)! * 뽑을 수!
    denominator = factorial(balls-share) * factorial(share)   
    return numerator/denominator

 

 

64. 가위 바위 보

def solution(rsp):
    answer = ''
    for i in rsp:
        if i == "2":
            answer += '0'
        elif i == "0":
            answer += '5'
        else:
            answer += '2'
    return answer

 

 

65. 모스부호 (1)

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 = ''
    letter = list(letter.split(' '))
    for i in letter:
        answer += morse[i]
    return answer

 

 

66. 개미 군단

def solution(hp):
    ant_cnt = 0
    ant_list = [5, 3, 1]
    while hp != 0:
        for i in ant_list:
            ant_cnt += (hp//i) # 사용할 개수 수
            hp = (hp%i)        # 차출된 개미로 인한 잔여 ph
    return ant_cnt

 

 

67. 순서쌍의 개수

pass, continue, break 명령어 : for, while 등 반복문을 원하는대로 조작하기 위해 사용하는 명령어
- pass : 실행할 코드가 없어 다음 행동을 계속 수행하라는 의미
- continue : 바로 다음 순번의 Loop(반복)을 수행하라는 의미
- break : 반복문을 멈추고 Loop(반복) 밖으로 나가라는 의미

#순서쌍의 곱이 n일 경우에 대한 횟수 계산하는 알고리즘
def solution(n):
    cnt = 0
    for i in range(1, n+1):
        j = n%i
        if j == 0:
            cnt += 1
        else:
            continue
    return cnt

 

 

68. 진료순서 정하기

def solution(emergency):
    rank_emer = []
    #1. emergency 매개변수를 응급도 순서대로 정렬하여 리스트 정의
    sorted_emer = sorted(emergency, reverse = True)
    
    #2. 응급 순서를 확인하고 싶은 원본 값을 가져와 index()함수를 사용해서 확인(단, 1순위가 0으로 표기되니 +1 추가 必)
    for j in emergency:
        rank_emer.append(sorted_emer.index(j) + 1)
    #rank_emergency = [sorted_emer.index(j) + 1 for j in emergency]
    return rank_emer

 

 

69. 외계행성의 나이

def solution(age):
    num_alp_dic = {'0':'a', '1':'b', '2':'c', '3':'d', '4':'e', '5':'f', '6':'g', '7':'h', '8':'i', '9':'j'} 
    answer = ''
    for i in str(age):
        answer += num_alp_dic[i]
    return answer

 

 

70. 배열 자르기

def solution(numbers, num1, num2):
    return numbers[num1:num2+1]

 

 

71. 짝수의 합

나누셈 연산자 구분 : ①'/'은 기본적인 나눗셈, ②'//'은 나눗셈의 몫, ③%은 나눗셈의 나머지

def solution(n):
    answer = 0
    for i in range(0, n+1):
        if i%2 == 0:
            answer += i
    return answer

 

 

72. 양꼬치

def solution(n, k):
    answer = (n*12000) + (k*2000) - ((n//10)*2000)
    return answer;

"""def solution(n, k):
    lamb = n * 12000
    beverage = k * 2000
    if len(str(n))==2:
        beverage -= int(str(n)[0]) * 2000
    return lamb+beverage"""

 

 

73. 각도기

def solution(angle):
    if (0 < angle) and (angle < 90):
        return 1
    elif angle == 90:
        return 2
    elif (90 < angle) and (angle < 180): 
        return 3
    elif angle == 180:
        return 4

 

 

74. 특정 문자 제거하기

replace() 함수 : 문자열 안에 특정 문자를 선택하여 새로운 문자로 변경하는 함수

def solution(my_string, letter):
    answer = my_string.replace(letter, '')
    return answer

 

 

75. 문자 반복 출력하기

def solution(my_string, n):
    answer = ''
    for i in my_string:
       answer += i*n
    return answer

 

 

76. 짝수 홀수 개수

def solution(num_list):
    #짝/홀 개수 입력 리스트, 짝수 및 홀수 카운트할 변수 정의
    answer = []; even = 0; odd = 0 
    
    for i in num_list:
        if i%2 == 0:  
            even += 1
        else:
            odd += 1
    
    answer.append(even)
    answer.append(odd)    
    
    return answer

"""def solution(num_list):
    answer = [0,0]
    for n in num_list:
        answer[n%2]+=1
    return answer"""

 

 

77. 직각삼각형 출력하기

n = int(input())
for i in range(0, n):
    print('*'*(i+1))

 

 

78. 문자열 뒤집기

#문자 매개변수를 뒤집어서 출력하는 알고리즘
def solution(my_string):
    answer = ''
    for i in range(len(my_string), 0, -1):
        answer += my_string[i-1]
    return answer

 

 

79. 배열 뒤집기

#문자 리스트 매개변수를 뒤집어서 출력하는 알고리즘
def solution(num_list):
    answer = []
    for i in range(len(num_list), 0, -1):
        answer.append(num_list[i-1])
    return answer

 

 

80. 나이 출력

def solution(age):
    return (2022 - age) + 1

 

 

81. 아이스 아메리카노

def solution(money):
    answer = [(money//5500), (money%5500)]
    return answer

 

 

82. 옷가게 할인 받기

def solution(price):
    if price >= 500000:
        price *= 0.8
    elif price >= 300000:   #elif 500000 > price >= 300000:
        price *= 0.9
    elif price >= 100000:   #elif 300000 > price >= 100000:
        price *= 0.95 
    return int(price)

 

 

83. 배열의 평균값

#방법01: 수치 계산 기능을 제공하는 numpy라이브러리 활용
"""import numpy
def solution(numbers):
    return numpy.mean(numbers)"""

#방법02: 내장함수 활용
def solution(numbers):
    return sum(numbers)/len(numbers)

 

 

84. 피자 나눠 먹기 (3)

#1판당 피자 조각 수(slice)가 있을 떄 n명 사람이 1조각 이상 먹을 수 있도록 주문해야할 피자 판수
def solution(slice, n):
    return ((n-1) // slice) + 1 

"""import math
def solution(slice, n):
    return math.ceil(n/slice)"""

 

 

85. 피자 나눠 먹기 (2)

#n명 사람들이 똑같은 수량의 피자를 먹고자할 때 주문해야할 피자 수
def solution(n):
    i = 1
    while(1):
        if (6*i)%n == 0:
            return i
        i += 1

 

 

86. 피자 나눠 먹기 (1)

.ceil() 함수 : 들어오는 인자의 올림 값을 반환

import math
def solution(n):
    return math.ceil(n/7)

 

 

87. 짝수는 싫어요

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

 

 

88. 최빈값 구하기

enumerate() 함수 : 반복문(for 등)에서 '인덱스 값'과 '요소 값'을 동시에 반환받을 때 사용하는 함수

Counter() 함수 : 중복된 데이터가 저장된 배열 내 각 원소들이 몇 번씩 나오는지 확인하는 함수
- 예시, from collections import Counter
            letters = 'bbibbi'
            c = Counter(letters)
            c     #Counter({'b':4, 'i':2})

from collections import Counter

def solution(array):
    counter = Counter(array)  
    max_count = max(counter.values()) 
        
    mode_values = [k for k, v in counter.items() if v == max_count]
    
    if len(mode_values) > 1:
        return -1
    else:
        return mode_values[0]

 

 

89. 중앙값 구하기

def solution(array):
    array = sorted(array)
    return array[len(array)//2]

 

 

90. 나머지 구하기

def solution(num1, num2):
    return num1%num2

 

 

91. 배열 두 배 만들기

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

 

 

92. 분수의 덧셈

Fraction() 함수 : 첫번째 인자는 '분자', 두번째 인자는 '분모'를 입력하여 완성된 분수를 기약분수로 바꿔주는 함수
- .numerator : 함수를 통해 산출한 결과의 '분자' 출력
- .denominator : 함수를 통해 산출한 결과의 '분모' 출력

from fractions import Fraction

def solution(numer1, denom1, numer2, denom2):
    num_den = Fraction(numer1, denom1) + Fraction(numer2, denom2)
    return [num_den.numerator, num_den.denominator]

 

 

93. 숫자 비교하기

def solution(num1, num2):
    return 1 if num1 == num2 else -1

 

 

94. 두 수의 나눗셈

def solution(num1, num2):
    return int((num1/num2)*1000)

 

 

95. 몫 구하기

def solution(num1, num2):
    return num1//num2

 

 

96. 두 수의 곱

def solution(num1, num2):
    return num1*num2

 

 

97. 두 수의 차

def solution(num1, num2):
    return num1-num2

 

 

98. 두 수의 합

def solution(num1, num2):
    return num1+num2

 

 

99. 머쓱이보다 키 큰 사람

def solution(array, height):
    cnt = 0
    for i in array:
        if i > height:
            cnt += 1
    return cnt

 

 

100. 중복된 숫자 개수

def solution(array, n):
    cnt = 0
    for i in array:
        if i == n:
            cnt += 1
    return cnt