본문 바로가기

Every

(139)
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)라고 표기하기도 하며 프로그램 코드를 작성할 때 진행과정을 단계별로 기록한 것이다. 즉, 알고리즘의 수행코드를 인간의 언어로 간략히 설명해논..
[A-Bine] 생애 첫 프로젝트의 결과물을 내비치다....(#3) 불화를 경험하다...🔥 학생사이의 프로젝트라도 순탄하지만은 않은법. 이 글을 읽는 여러분은 통상적인 프로젝트 성공률을 들어본적이 있는가? 정말 뛰어난 전문가를 모아도 20%? 30%?가 채 되지 않는다. 문제는 단순했다. 기술담당인 나와 프로젝트 리더격인 팀원사이에서 작업하는 스타일의 차이가 일어났다. 흔히 이야기하는 팀원들간 소통의 문제가 발생한 것이다. 당시에는 어찌어찌 절충하여 해결했지만, 프로젝트가 마무리되고 그에 대한 회고를 작성하는 지금 시점에서 생각해보면 후회가 조금 들기도 한다. 각자의 성향차이가 있고 객관적으로 판단했을때 내가 진행한 스타일이 틀리다곤 생각하지 않는다. 그러나 조금 더 유하게, 조금 더 좋은 분위기로 소통할 수 있었을 텐데.. 하는 생각이 든다. 물론, 이미 지난이야기다...
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자리는 그대로 같다붙이는 방식이다. 코드로 구현하면 다음과 같다. 더 쉽게 해결할 수 있는가 싶기도 하면서 문자열 길이에 대한 제한이 별로 없기때문에 할 수 있는 해결책이기도 한것 같다.