본문 바로가기

알고리즘 & 코딩테스트

(48)
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를 다루는 ..