본문 바로가기

알고리즘 & 코딩테스트/코딩테스트

(45)
Programmers Lv.1 "자릿수 더하기" 요 문제는 주어진 숫자의 자릿수를 분리하는 것이 핵심이다. 무슨말이냐 하면 125의 숫자가 들어왔을 때 우리는 3자리 숫자 125로 보지만 간혹 125의 각 자릿수를 분할하여 1, 2, 5로 나눠서 생각해야할 때가 있다는 것이다. 이때 자주 사용하는 알고리즘이 데이터 타입간 변화를 이용한 것이다. 자세한 내용은 다음과 같다. 자연수 n이 주어진다. n의 데이터 타입을 문자열로 변환한다. (Python의 경우 str()이 되겠다.) 문자열로 바꾼 n은 iterable객체가 되므로 각각의 원소를 분리할 수 있다. def solution(n): answer = 0 for e in str(n): answer += int(e) return answer 파이썬의 Iterable 객체는 문자열(string), 리스트..
Programmers Lv1. "평균 구하기" 평균은 전체 원소의 총합을 갯수로 나는 값이며 일반적으로 산술평균이 우리가 알고있는 평균과 같다. def solution(arr): answer = sum(arr) / len(arr) return answer
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..