본문 바로가기

CodingTest/Programmers

(66)
[ 프로그래머스 ] 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..
[ 프로그래머스 ] 음양 더하기 / 제출 1 / def solution(absolutes, signs): answer = 0 for i in range(len(absolutes)): if signs[i]: answer += absolutes[i] else: answer -= absolutes[i] return answer 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 경우의 수 나눠 분기문으로 해결했습니다. / 다른 분들 풀이 / def solution(absolutes, signs): answer=0 for absolute,sign in zip(absolutes,signs): if sign: answer+=absolute else: answer-=absolute return answer for문에 zip() 사용하는 ..
[ 프로그래머스 ] 크레인 인형뽑기 게임 / 제출 1 / def solution(board, moves): answer = 0 n = len(board) last = [100] for move in list(map(lambda x:x-1,moves)): # 세로줄 끝까지 체크 for i in range(n): # 0 나오면 if board[i][move] != 0: #넣기 전에 체크 if last[-1] == board[i][move]: last = last[:-1] board[i][move] = 0 answer += 2 else: last.append(board[i][move]) board[i][move] = 0 break return answer 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 소요시간 40분 40분 중 15분..