본문 바로가기

알고리즘 & 코딩테스트

(48)
Programmers Lv1. "약수의 합" 프로그래머스 Lv.1 "약수의 합"이다. 약수!! 단일문제로도 자주 나오고, 이를 문제 내 부분적인 것으로도 자주 응용된다. 이 문제는 크게 2가지 부분으로 나눌 수 있다. 주어진 n의 약수를 구한다. 구한 약수의 총합을 반환한다. 심플하군! 정말 쉽다. 그럼에도 한번 정리는 할 필요가 있으니 요거는 알고리즘쪽에 다시 깔끔하게 정리하도록 하겠다. def solution(n): answer = 0 tmp = [] for i in range(1, n+1): if i == n: tmp.append(i) elif n%i == 0: tmp.append(i) answer = sum(tmp) return answer 일종의 Brute Force라고 봐도 무방한듯 하다!
Programmers Lv.1 "나머지가 1이 되는 수 찾기" 프로그래머스 Lv.1 "나머지가 1이 되는 수 찾기"이다. 문제를 쭉 읽어보면 핵심이 되는 부분이 즉각적으로 보인다. n이 주어졌을 때 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 구하면 된단다. 즉, 가장 작은 자연수부터 n을 계속 나누다 나머지가 1이 되는 시점에서 멈추면 된다. 그런데 x를 반복수 삼아 반복을 하려면 언제까지 반복을 해야하는지 알아야 하지 않은가? 이 경우 조금만 더 생각해보면 알 수 있다. 자연수 사이의 나눗셈은 피제수의 크기가 제수를 넘어갈 수 없다. 즉, x의 범위는 자연스레 n까지 되는것이다. def solution(n): answer = 0 for i in range(1, n): if n%i==1: answer = i break return answer 요 ..
Programmers Lv1. "제일 작은수 제거하기" 요번 문제는 굉장히 쉬운 문제이다. 그런데 "제일 작은수"라는 말에서 문득 떠오른게 하나있다. 우리가 코딩테스트를 보다보면 가장 큰 수 혹은 작은 수, 선형구조상의 이들의 위치파악 등에 대한 이야기를 많이 하게된다. 쉬운개념이고 누구나 구현할 수 있지만 이번기회에 문제풀이와 동시에 정리해보려고 한다. 먼저, 문제풀이부터 해보자! Programmers Lv.1 "제일 작은 수" 1. 정수가 저장한 배열, arr에서 가장 작은 수를 제거하는 기능을 구현해야 한다. 2. 빈 배열인 경우 [-1]을 리턴한다. 3. [10]인 경우 [-1]을 리턴한다. 4. 일반적인 배열의 경우 가장 작은 수를 제거한 배열을 리턴한다. 핵심 알고리즘을 보자. 1. 매개변수 arr가 빈배열이거나 [10]인 경우 1-1. retur..
Programmers Lv1. "콜라츠 추측" 전형적인 구현문제이다. Programmers Lv.1 "콜라츠 추측" 시작해보자. 1. 입력값으로 num이 주어지고, 이는 1이상 800만 미만의 정수이다. 2. 주어진 입력값에 따라 작업이 시행된다. 2-1. 입력값이 짝수이면 2로 나눕니다. 2-2. 입력값이 홀수이면 3을 곱하고 1을 더합니다. 2-3. 위 2-1, 2-2를 1이 나올 때까지 반복합니다. 3. 단, 500번 반복해도 1이 되지 않으면 -1을 반환합니다. 필자는 이를 보자마자 의사코드가 떠올랐다. 그저 설명 그대로 구현하면 되는 문제라서 그런것 같다. 의사코드는 (슈도코드 : pseudo code)라고 표기하기도 하며 프로그램 코드를 작성할 때 진행과정을 단계별로 기록한 것이다. 즉, 알고리즘의 수행코드를 인간의 언어로 간략히 설명해논..
Programmers Lv1. "하샤드 수" 비교적 자주 사용되는 기본적인 스킬이 이 문제에 하나 녹아있다고 생각한다. 그에 대한 내용은 밑에서 차차 알아보기로 하자. 이 문제도 어렵지 않다. Programmers Lv.1인 "하샤드 수" 시작해보자. 문제분석부터 해보자. 1. 양의 정수 x가 입력값으로 주어지고 범위는 1~10000이하이다. 2. 하샤드 수의 여부를 판별하여 True/False를 출력한다. 쉽게 이야기해서 하샤드 수에 대한 개념이 있어야 하는데 이를 문제에서 설명해준다. 하샤드 수는 무엇일까? 어떠한 양의 정수 x에 대하여 x의 각 자릿수의 합을 M이라 했을 때 x가 M으로 나누어 떨어지면 하샤드 수이다. 핵심 알고리즘을 구현해보자. 1. M을 구한다. 1-1. x를 각 자릿수로 나눈다. 1-2. 각 자릿수를 더하여 M을 만든다...