본문 바로가기

CodingTest

(238)
[ 프로그래머스 ] 나머지가 1이 되는 수 찾기 / 제출 1 / def solution(n): answer = 0 n -= 1 for i in range(2,n+1): if n % i == 0: answer = i break return answer 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 연산을 거꾸로 해도 무방하여 1을 미리 빼고 해당 숫자를 가장 작은 수로 나누는 경우를 구했습니다.
[ 프로그래머스 ] 최소직사각형 / 제출 1 / def solution(sizes): answer = 0 max_width = 0 max_height = 0 for size in sizes: w,h = size if w < h: w, h = h, w max_width = max(max_width, w) max_height = max(max_height, h) return max_width*max_height 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 처음에 문제 해결방식이 이해가 안 갔는데, 노트에 각 예제를 써서 차근차근 확인해보니 풀이가 떠올려졌습니다. width와 height라는 정의에 매몰되지 않고, 그냥 직사각형이라고 생각해서 각 직사각형의 긴 변들끼리 비교하고 짧은 변들끼리 비교하면 되겠다 싶었습니다. 그..
[ 프로그래머스 ] 2016년 / 제출 1 / def solution(a, b): # 윤년: 2월이 29일까지인 해 +1일 # 한 달 날짜 수:31일: 1,3,5,7,8,10,12 +3일 | 30일: 4,6,9,11 +2일 thirty_one = [1,3,5,7,8,10,12] thirty = [4,6,9,11] # 1월 1일 금 +28(+3일) 2월 화+28(+1일) 3월 수 # 3,1,3,2 = 9일/7일 = 2일 => 5월은 일부터 시작(0) + 24/7 = 3 (-1) 화 # 5월 24일 화 day = ['SUN','MON','TUE','WED','THU','FRI','SAT'] passing_date = 0 num = 0 for i in range(a-1): if i+1 in thirty_one: num = 3 elif i+..
[ 프로그래머스 ] 두 개 뽑아서 더하기 / 제출 1 / def solution(numbers): answer = [] for i in range(len(numbers)): for j in range(i+1,len(numbers)): if numbers[i]+numbers[j] not in answer: answer.append(numbers[i]+numbers[j]) answer.sort() return answer 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 answer에 새 더한 값을 넣어줄 때 일단 다 넣은 다음 set함수를 써서 중복제거할까 하다가 그냥 넣어줄 때부터 이미 존재하는지 확인해야지로 마음 바꿔 not in 으로 구현했습니다. 제출 후 다른 분들 풀이 보니 대부분 set을 쓰신 것 같습니다. 상관은 없는데 ..
[ 프로그래머스 ] 예산 / 제출 1 / def solution(d, budget): answer = 0 d.sort() for i in range(len(d)): if budget - d[i] >= 0: budget -= d[i] answer += 1 else: break return answer 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 다른 분들 풀이와 비교했을 때 어느정도 일치하는 풀이인 것 같습니다. 기초적인 난이도의 문제였습니다.
[ 프로그래머스 ] 3진법 뒤집기 / 제출 1 / def solution(n): answer = 0 div = n result = [] while n >= 1: rem = n%3 result.append(rem) n = n//3 print(result) for i in range(len(result)): mul = len(result)-1-i print(result[i],'*',3**mul) answer += result[i]*(3**mul) 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 반성 포인트 1. 3진법 개념이 낯설어서 검색을 해야해 풀이 시간이 조금 걸렸습니다. 진법 개념은 익숙하게 익히고 갑시다. 2. 파이썬 기초문법도 아직 헷갈릴 때가 있습니다. 마지막에 제곱 계산을 할 깨 3**mul 로 한다는 걸 3^m..
[ 프로그래머스 ] 약수의 개수와 덧셈 def solution(left, right): answer = 0 for num in range(left, right+1): data = [] for i in range(1, num+1): if num % i == 0: data.append(i) if len(data)%2 == 0: answer += num else: answer -= num return answer - 약수 구하는 알고리즘 기억하고 갑시다. - 리스트의 개수 => count가 아니라 len입니다... - 문제 잘 읽읍시다.. 특히 핵심 연산 다 끝내고 마지막에 answer구할 때 긴장 풀려서 실수 하는 적이 많은 것 같은데, 이런 간단한 문제에서조차 그랬습니다. 마지막에 해당 숫자를 +/- 했어야 했는데 해당 숫자 약수 개수를 +/-..
[ 프로그래밍 ] 폰켓몬 / 제출 1 / def solution(nums): answer = 0 n = len(nums) nums = set(nums) while answer < n//2 and nums: nums.pop() answer += 1 return answer 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 간단한 문제라서 다른 분들 풀이도 거의 비슷한 자료구조를 이용해 푸신 것 같습니다. 해서 기타 첨언 없이 글 마칩니다~
[ 프로그래머스 ] 모의고사 / 제출 1 / def solution(answers): result = [] n = len(answers) first = [1,2,3,4,5] second = [2,1,2,3,2,4,2,5] third = [3,3,1,1,2,2,4,4,5,5] students = [first, second, third] for student in students: score = 0 # answer이 학생찍는 기본배열보다 작을 때 if n < len(student): for a, s in zip(answers, student[:n]): if a == s: score += 1 # 학생 찍는 기본 배열보다 answer이 많을 때 else: # 기본 배열 늘려주기 student = student*(n//len(student)..
[ 프로그래머스 ] 소수 만들기 / 제출 1 / from itertools import combinations def isPrimeNum(x): for i in range(2,x): if x % i == 0: return False return True def solution(nums): answer = 0 # 3개 골라서 for candidate in list(combinations(nums,3)): if isPrimeNum(sum(candidate)): answer += 1 return answer 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 순간 소수 판별이 기억이 안 나서 흠칫 했습니다. 다행히 금방 떠올렸고. 혹시나 헷갈릴까봐 따로 함수로 빼서 구현했습니다. combinations도 이름이 기억이 안 나서 p..