본문 바로가기

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

(45)
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을 만든다...
Programmers Lv1. "x만큼 간격이 있는 n개의 숫자" 가장 기초적인 문제이다. Programmers Lv.1의 "x만큼 간격이 있는 n개의 숫자"이다. 문제를 분석해보자. 1. 정수 x와 자연수 n을 입력받는다. 2. x부터 시작해 x씩 증가하는 숫자 n개를 담은 리스트를 반환한다. 3. x는 -1000만 이상, 1000만 이하인 정수이다. 4. n은 1000 이하인 자연수이다. 필자가 파악한 핵심은 2번이다. 2번을 어떻게 구현할지가 핵심이라고 생각한다. 과거에는 설명 그대로 구현해서 통과했었다. 다시 한번 보았을땐 반환값이 리스트이기때문에 Python의 List Comprehension을 이용하여 좀 더 간결한 코드를 작성해보았다. 코딩테스트의 기본은 문제설명을 읽고 핵심파악과 더불어 최대한 빠르게 해결책을 찾아내는것이라고 생각한다. 필자도 항상 기본에..
Programmers Lv1. "핸드폰 번호 가리기" 굉장히 쉬운 프로그래밍 문제이다. Programmers Lv.1에 속하고 "핸드폰 번호 가리기"라고 한다. 쉬운문제여도 기본에 충실해보자! 문제파악을 해보면 다음과 같다. 1. 입력으로 문자열이 주어지고 출력도 문자열이라는 것. 2. 뒷 4자리를 제외한 나머지를 *로 치환한다는 것. 3. 주어지는 문자열의 길이가 4이상 20이하라는것. 문제를 보면 어떤 해법이 떠오르는가? 필자의 경우 직독직해와 같은느낌(?)의 직관적인 해결법을 떠올렸다. 주어지는 문자열을 뒷 4자리와 앞부분으로 쪼갠뒤 앞부분은 모두 *로 치환하고 4자리는 그대로 같다붙이는 방식이다. 코드로 구현하면 다음과 같다. 더 쉽게 해결할 수 있는가 싶기도 하면서 문자열 길이에 대한 제한이 별로 없기때문에 할 수 있는 해결책이기도 한것 같다.
Programmers Lv1. "행렬의 덧셈" 과거엔 고등학교때 배웠던 "행렬연산"이다. 필자도 고등학교때 교육과정의 변화로 배우지 않았는데 대학가서 어차피 배웠어야 했다고 궁시렁궁시렁 했던 기억이 난다. 기초적인 문제다. Programmers Lv.1에 속하며 "행렬의 덧셈"이라고 한다. 문제를 보고 처음 파악한 내용은 다음과 같다. 1. 행렬의 덧셈만을 취급한다는것. 2. 제한조건에 의해 매개변수 arr1과 arr2의 행/열 길이는 각각 500을 넘지 않는다는것. 3. 행렬의 덧셈만 구현하기에 주어지는 arr1, arr2가 같은 크기의 행/열로 구성된다는 것. 딱, 보자마자 이중포문을 이용한 해결법이 떠올랐다. 그것을 코드로 구현하면 아래와 같다. 그런데, 이를 조금 더 쉽게 할 수는 없을까....? 파이썬에 Numpy라는 matrix를 다루는 ..