개발자의 길/Algorithm
-
124나라의 숫자 (프로그래머스, 레벨2)개발자의 길/Algorithm 2021. 4. 1. 16:36
https://programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 1. 아이디어 2. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def solution(n): a = '' while n > 0: r = n % 3 q = n // 3 if r == 0: # 나머지가 0이면 자릿수 변경. r = 4 # 올라간 자릿수를 1낮추고, 3대신 4로 바꾼다. q -= 1 a += str(r) n = q answer = a[::-1] return answer cs
-
약수의 개수, 약수의 합 공식개발자의 길/Algorithm 2021. 3. 27. 21:18
고등학교 수학 시간에 배우는 소인수 분해 후 약수의 개수와 합을 구하는 공식을 이용해서 코드를 작성해보자. 약수의 합(프로그래머스, 레벨1), 양의 약수의 합 공식 https://programmers.co.kr/learn/courses/30/lessons/12928 코딩테스트 연습 - 약수의 합 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하.. mathncode.tistory.com 위에 코드를 조금 개선해서 만들어 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40..
-
소수 만들기 (프로그래머스, 레벨1)개발자의 길/Algorithm 2021. 3. 27. 19:54
https://programmers.co.kr/learn/courses/30/lessons/12977 코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 programmers.co.kr 처음 아이디어는 조합을 이용하는 것이다. 모든 경우를 다 구해서 각각 확인한다. 파이썬은 combinations()를 제공하므로 어렵지 않다. 다른 사람도 대부분 그렇게 푼 것 같다. 다른 방법이 없을까 고민해봤다. 예전에 수학 문제를 풀 때 생각했던 게 기억나서 다음과 같이 아이디어를 생각해냈다. 1. 여러 개의 수를 더할 때 홀수가 짝수 ..
-
약수의 합 (프로그래머스, 레벨1), 양의 약수의 합 공식개발자의 길/Algorithm 2021. 3. 17. 10:32
https://programmers.co.kr/learn/courses/30/lessons/12928 코딩테스트 연습 - 약수의 합 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수 programmers.co.kr 1. 가장 쉬운 풀이는 그냥 n 보다 작은 수를 하나씩 가져와서 조건에 맞으면 합을 구하기 def solution(n): return n + sum([i for i in range(1, n // 2 + 1) if n % i == 0]) 2. 소인수 분해 후 양의 약수의 합을 구하는 공식 사용 양의 정수 n을 ..
-
큰 수 만들기 (프로그래머스, 레벨2)개발자의 길/Algorithm 2021. 3. 12. 16:22
https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 첫 번째 아이디어는 조합(combinations)을 이용하는 것이다. 예시는 다 통과했는데 실제 테스트에서 시간 초과가 나온다. 모든 조합의 경우의 수를 리스트에 만들어서 최댓값을 뽑아오기 때문에 시간이 오래 걸리는 것 같다. 시간문제만 아니면 간단한 코드로 해결할 수 있다. 시간을 줄이거나 다른 방법을 생각해보자. 확실히 레벨2 부턴 쉽지 않다. 두 번째 아이디어는 슬라이싱을 이용해보았다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def solution(number, k)..
-
무엇이 추구해야 할 방향인가?개발자의 길/Algorithm 2021. 3. 10. 16:50
https://programmers.co.kr/learn/courses/30/lessons/12904 코딩테스트 연습 - 가장 긴 팰린드롬 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들 programmers.co.kr 내 풀이: https://github.com/mathncode/solving-algo-daily/blob/main/weekly/2020-03-weekly1.py 다른 분 풀이: 내 풀이의 접근은 펠린드롬인 부분 문자열만 찾아내어 그 부분 문자열마다 길이를 계산한다. 다른 분 풀이는 모든 부분 문자열을 리스트에..
-
'하나씩 세는 것이 강력한 방법이다'개발자의 길/Algorithm 2021. 3. 4. 11:43
https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 코드로 구현하면서 때론 간결한 방법이 떠오르지 않을 때도 있다. 내가 그 내용을 모르거나 기억이 안 나거나. 예전에 대수학을 공부할 때 학부생들이 많이 보는 책에 이런 말이 쓰여있었다. '하나씩 모두 세는 방법은 아주 강력한 방법이다' 결국 안될 때는 경우의 수를 다 구해서, 하나씩 다 세면 된다.