코딩테스트63 [파이썬] 실패율 - 2019 KAKAO BLIND RECRUITMENT [CODING TEST #36] https://school.programmers.co.kr/learn/courses/30/lessons/42889 두 개의 딕셔너리를 만든다. 1. users : 각 스테이지별 막힌 유저수를 기록 2. fail : 각 스테이지별로 계산한 실패율을 기록 users는 모든 스테이지를 통과한 경우 N+1라고 표기하는데, 실패율은 1~N까지만 계산하면 된다. 전체 유저수를 임시 변수값에 저장한 뒤, 1스테이지부터 실패 유저수 / 도달한 유저수를 계산하여 fail에 저장한다. 이후, 전체 유저수에서 실패 유저수를 빼면 다음 스테이지에 도달한 유저수를 계산할 수 있다. 도달한 유저수가 진작에 0이 되어 0/0을 계산하게 되면 에러가 난다. 그러므로 0일 경우에는 fail = 0으로 저장하는 조건을 추가한다. 그리고.. 2022. 8. 3. [파이썬] 시저 암호 [CODING TEST #35] https://school.programmers.co.kr/learn/courses/30/lessons/12926 리스트를 쓰지 않고, 아스키 코드를 이용해서 풀어 보았다. chr(ascii) : ascii에 대응하는 alpha를 문자열로 반환 ord(alpha) : alpha에 대응하는 아스키 코드를 문자열로 반환 아스키 코드는 소문자 a~z, 그리고 대문자 A~Z까지 순서대로 배치되어 있으니 케이스를 나누어 'A'와 Alpha까지의 차이에다가 n을 더한 만큼 아스키 코드로 'A'로부터 이동한 뒤, 문자로 반환시킨다. 공백은 공백으로 나와야 하는데, 공백에 대응하는 아스키 코드가 존재하므로 코드에 공백인 경우는 pass하도록 구현해야 한다. def solution(s, n): answer = '' fo.. 2022. 8. 2. [파이썬] 3진법 뒤집기 - 월간 코드 챌린지 시즌1 [CODING TEST #34] https://school.programmers.co.kr/learn/courses/30/lessons/68935 3진수로 바꿨을 때 최대 자릿수를 계산한 뒤, 3진수로 바꾼다. 문자열 역순 슬라이싱[::-1]으로 뒤집고, int(string, 3) 함수로 10진수로 바꾼다. def solution(n): answer = 0 new_n = '' s=0 # 3진법 자릿수 구하기. 등호 포함 while n >= 3**(s+1): s += 1 # 윗자리부터 0,1,2 채우기 while n != 0: new_n += str(n//(3**s)) n -= (n//(3**s))*(3**s) s -= 1 # 역순 슬라이싱 new_n = new_n[::-1] # STRING 형의 n진수를 10진수로 : int(STRIN.. 2022. 8. 2. [파이썬] 로또의 최고 순위와 최저 순위 - 2021 Dev-Matching: 웹 백엔드 개발자(상반기) [CODING TEST #33] https://school.programmers.co.kr/learn/courses/30/lessons/77484#fnref1 def solution(lottos, win_nums): answer = [] right = 0 erased = 0 for lotto in lottos: if lotto in win_nums: right += 1 elif lotto == 0: erased += 1 # 최고 순위 if right + erased == 6: answer.append(1) elif right + erased == 5: answer.append(2) elif right + erased == 4: answer.append(3) elif right + erased == 3: answer.append(4) e.. 2022. 8. 2. [파이썬] 불량 사용자 - 2019 카카오 개발자 겨울 인턴십 [CODING TEST #32] https://school.programmers.co.kr/learn/courses/30/lessons/64064 순열을 이용하여 banned_id의 길이에 맞춰 user_id로부터 모든 순열 조합을 뽑아낸다. 그리고 조합 속 이름을 순서에 따라 조건을 따지면 된다. 순열로 뽑은 튜플 "user"와 banned_id가 같은 경우의 수인지 따지는 함수 ox()를 새로 정의했다. from itertools import permutations def same(user, banned_id): for word in range(len(user)): if len(user[word]) != len(banned_id[word]): #1. 길이 check return False for alpha in range(len(b.. 2022. 8. 1. [파이썬] 행렬의 곱셈 [CODING TEST #31] https://school.programmers.co.kr/learn/courses/30/lessons/12949 두 행렬의 곱은 조건이 한정적이어서 간단하게 구현이 가능하다. 곱의 결과는 [arr1의 row x arr2의 column] 형태를 띠며, arr1의 column과 arr2의 row가 같아야 한다. def solution(arr1, arr2): arr1_row, mid, arr2_col = len(arr1), len(arr2), len(arr2[0]) answer = [[0 for _ in range(arr2_col)] for _ in range(arr1_row) ] for i in range(arr1_row): for j in range(arr2_col): for m in range(mid).. 2022. 8. 1. [파이썬] 이진 변환 반복하기 - 월간 코드 챌린지 시즌1 [CODING TEST #30] https://school.programmers.co.kr/learn/courses/30/lessons/70129 이진법 문제는 아니었고, bin() 함수와 조건만 잘 구현하면 쉽게 풀 수 있었다. def solution(s): answer = [] # s -> 1이 될 때까지 이진 변환 횟수와 지워진 0의 개수 return total_zeros = 0 bin_count = 0 while True: bin_count += 1 # 이진 변환 횟수 zero_count = 0 # s 내 0 개수 세기 for i in range(len(s)): if s[i] == '0' : zero_count += 1 total_zeros += zero_count if len(s) - zero_count == 1: # s = .. 2022. 7. 31. [파이썬] 주차 요금 계산 - 2022 KAKAO BLIND RECRUITMENT [CODING TEST #29] https://school.programmers.co.kr/learn/courses/30/lessons/92341 아이디어는 어렵지 않았으나, 처음에 차 번호를 int형으로 바꾸어야 하는 줄 알고 차 번호를 key로 가지는 딕셔너리를 다룰 때 int로 바꿨다가, 계속 에러가 어디서 나는 지 몰라서 개고생을 해 버렸다. from collections import defaultdict import math def solution(fees, records): car = list(set(map(lambda x: x.split(' ')[1],records))) car_in = defaultdict() total_fee = {k:0 for k in car} for record in records: car = rec.. 2022. 7. 31. [파이썬] 2개 이하로 다른 비트 - 월간 코드 챌린지 시즌2 [CODING TEST #28] https://school.programmers.co.kr/learn/courses/30/lessons/77885 이 문제를 풀기 위해 전날 자기 전에 비트 연산자에 대해 정리를 했는데.. 짝수면 1을 더하고, 홀수의 경우 오른쪽에서 가장 가까운 0을 찾고, 그 뒤의 1을 0으로 만드는 아이디어는 떠올렸는데, 가장 가까운 0을 찾는 과정에서 뭔가 이상한지 계속 에러가 났다. 하나쯤은 pass할 법도 한데.. def f(x): if x%2 == 0 or x == 1: # 짝수 return x + 1 else : # 홀수 k = 0 while x >= (1 1) def solution(numbers): answer = [] for number in numbers: answer.append(f(number)).. 2022. 7. 30. 이전 1 2 3 4 5 6 7 다음 728x90