STUDY 35

[Clean Code] 4장 주석

Clean Code 스터디 내용 정리; 4장 주석 주석의 불필요성과 좋은 주석, 나쁜 주석의 구체적인 예시에 대해 다룬다. 이 글에서는 그 중에서 주석과 좋은 주석의 내용에 대해 정리하였다. 주석은 필요악 코드 자체로 의미가 충분히 전달된다면 주석은 전혀 필요하지 않다. 주석은 코드만으로 표현할 방법을 찾지 못해 할 수 없이 사용하게 되는 것이다. 따라서 주석이 필요한 상황에 처하면 코드로 의도를 표현할 방법이 정말 없는지 곰곰이 생각해보자. 주석은 가능한 줄이도록 노력하자. // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) if (employee.isEligibleForFullBenefits..

STUDY/Books 2021.05.16

[Clean Code] 3장 : 함수

Clean Code 스터디 내용 정리; 3장 함수 함수를 잘 만드는 법을 소개한다. 의도를 분명히 표현하는 함수, 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있는 함수를 구현하려면 어떻게 해야 할까? 한 가지 일만 해야 한다. 1. 함수 내 모든 문장의 추상화 수준이 동일하게 한다. 이때 추상화란, 구체적인 것을 감추고, 보고 싶어하는 전체적인 특성을 드러내는 것이다. 예를 들어, 파일에 이름을 붙여 파일 내부를 보지 않더라도 그 파일의 역할이 무엇인지 파악할 수 있게 하는 것이나, 함수에 이름을 붙여 함수가 구체적으로 하는 일을 함수의 이름으로 대표해서 표현하는 것이 추상화에 해당한다. 한 함수 내에 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈리게 된다. 특정 표현이 구체적인 개념인지 추상화된..

STUDY/Books 2021.05.11

[Clean Code] 2장 : 의미 있는 이름

Clean Code 스터디 내용 정리; 2장 의미 있는 이름 변수는 물론이고 함수, 클래스와 페키지, 소스 파일, 디렉터리 등에 이름을 붙일 때 사용할 수 있는 이름 잘 짓는 간단한 규칙을 소개한다. 옳은 정보와 분명한 의도를 담는다. 1. 변수나 함수, 클래스의 이름은 그것에 대한 정보를 담아야 한다. 따로 존재 이유와 수행 기능, 사용 방법 등에 대한 주석이 필요하지 않을 정도로 이름에 의도를 분명히 드러낸다. 대다수의 이름은 그 자체로 의미가 분명하지 않으므로, 클래스, 함수, 이름 공간에 넣어서 맥락을 부여한다. 마땅치 않다면 마지막 수단으로 접두어를 붙인다. 생성자를 중복정의하는 경우에는 정적 팩토리 메소드를 사용해 메서드 이름으로 인수를 설명한다. int d // (x) int daysSinc..

STUDY/Books 2021.05.07

[Clean Code] 1장 : 깨끗한 코드

Clean Code 스터디 내용 정리; 1장 깨끗한 코드 들어가기에 앞서, 추천사에도 좋은 말이 실려 있어 기억하고 싶은 마음에 적는다. 오류는 인간의 본성이고 용서는 신의 본성이다...코드는 결코 완벽하지 않으므로 자신의 코드 상태를 정직하게 말한다. 좀 더 인간적이 되고, 좀 더 신의 용서를 받을 자격을 갖추며, 좀 더 세세함에 깃든 위대함에 가까워진다. 우리가 코드 작성에 신경 써야 하는 이유? 코드는 요구사항을 상세하게 표현하는 수단, 언어이다. 코드를 자동으로 생성하는 시대가 온다고 하더라도 코드가 사라지진 않는다. 프로그래밍 언어에서 추상화 수준은 점차 높아지겠지만, 그럼에도 어느 순간에는 반드시 정밀한 표현이 필요하다. 코드는 항상 존재하리라. 코드는 앞으로도 항상 존재할 것이고, 중요하게 ..

STUDY/Books 2021.05.05

백준 10844번, '쉬운 계단 수' 풀이과정 및 코드 / C++, Python

백준 10844번 '쉬운 계단 수' 풀이과정 및 코드 문제 설명 수의 길이 N이 주어지면, 해당 길이의 수 중에서 인접한 모든 자리 수의 차이가 1이 나는 계단 수의 개수를 구하여 1,000,000,000으로 나눈 나머지를 반환한다. N은 1보다 크거나 같고 100보다 작거나 같다. 주의할 점 계단 수는 '인접한 모든 자리수의 차이가 1 이하인 수'가 아니라, '인접한 모든 자리수의 차이가 1인 수'라는 점. 동일한 숫자나 2 이상 차이가 나는 숫자는 연달아서 올 수 없다. 맨 마지막 숫자가 무엇이냐에 따라서 자리수가 하나 늘었을 때 올 수 있는 숫자의 개수가 달라진다는 점. -> 예를 들어 마지막 숫자가 9라면 그 뒤에는 무조건 8 밖에 올 수 없고, 마지막 ..

프로그래머스 level 2 '124 나라의 숫자' C++ 풀이 과정 및 코드

프로그래머스 level02 '124 나라의 숫자' C++ 풀이 과정 및 코드 문제 설명 기존의 10진법으로 표현된 자연수가 주어지면, 1과 2, 4만을 사용한 숫자 체계로 변환하여 string값으로 리턴시키는 문제이다. 주의할 점 1,2,4라는 연속적이지 않은 숫자로 구성된 체계 0부터가 아닌, 자연수만 존재함 string값으로 리턴함 n의 최대 범위 생각의 흐름 3개의 숫자로 이루어져 있으니 3으로 나눈 몫과 나머지를 사용해야겠다. n을 3으로 나눈 나머지를 이용해 124로 변환한 숫자의 마지막 자리 값은 구할 수 있었지만, n의 나머지 숫자들을 자릿수마다 하나하나 구하는 방법을 생각해보니, 3의 거듭제곱의 합을 구해야 하는 방법밖에는 생각이 나지 않았다.(자릿수가 늘어나는 기준은 3, ..

백준/1620번, 포켓몬 마스터/C++

백준 1620번 '나는야 포켓몬 마스터 이다솜' 문제 설명 포켓몬의 번호와 포켓몬의 이름을 저장해둔 후, 문제에서 포켓몬의 이름이 주어지면 그 포켓몬의 번호를 출력하고, 포켓몬의 번호가 주어지면 이름을 출력해야 하는 문제이다. 첫 번째 줄에는 포켓몬의 개수 N과 맞추어야 하는 문제 개수 M이 주어지고, 이어서 N줄에 걸쳐 1번부터 N번까지의 포켓몬 이름이 주어진다. 그 후에는 이어서 M줄에 걸쳐 포켓몬의 이름 혹은 번호가 주어진다. 주의할 점 포켓몬 개수의 최대범위가 10만이기 때문에, 시간초과에 유의해야 한다. 포켓몬 번호는 1번부터 N번까지이다. 코드 #include #include using namespace std; map s; map s2; int N, M; int main(voi..

백준/13458번, 시험 감독(연산)/C++

시험장마다 한 명의 총감독관과 여러 명의 부감독관이 있을 수 있을 때, 응시생을 모두 감시하는 데에 필요한 최소 감독관 수를 구하는 간단한 연산 문제이다. 주의할 점 1. 빼기의 반복은 나누기이다. 2. 최대범위를 고려하여 데이터타입을 정하자. #include #include #define MAX 1000000 using namespace std; int N, B, C; int p[MAX]; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int x = 0; long long sum = 0; cin >> N; for (int i = 0; i > p[i]; } cin >> B >..

프로그래머스/H-Index(정렬)/C++ ; 정렬 없이 풀기, 정렬하여 풀기

즉, citations 배열에서 h 이상의 값을 가지는 원소가 h개 이상인 h의 최대값을 찾는 것이다. 문제 설명이 다소 혼란스러워서 문제 자체를 이해하는 데에 어려움을 겪는 사람이 많아보였다. 나도 문제를 읽으면 읽을수록 헷갈렸기에, 주의할 점과 테스트 케이스를 자세히 적어보았다. 주의해야 할 점 1. h가 반드시 citations 배열의 원소값이어야 하는 것은 아니다. -> citations = [10, 9, 4, 1, 1], answer = 3 2. h 이상의 값을 가지는 원소가 h개여야 하는 것은 아니다. -> citations = [0, 1, 1], answer = 1 3. h 값은 citations 배열의 size 값보다 큰 값일 수 없다. -> citations = [31,66], answe..

프로그래머스/큰 수 만들기(Greedy)/C++

다양한 방법으로 풀 수 있는데, 나는 큐를 사용해서 풀었다. 주의할 점 : 같은 숫자들이 있는 경우에도 반드시 k개의 수를 제거하여 가장 큰 수를 만들어야 한다는 점. 작은 수를 골라서 제거하는 방식으로는 틀리기 쉽다. #include #include #include #include using namespace std; /* 처음에 사용한 직접 정의한 최대값 인덱스 찾기 함수 int find_max_index(string &n, int start, int end){ int max = -1; int max_index = 0; for(int i = start; i 0){ index = max_element(number.begin()+start+1,number.begin()+start+2+k) - number..