분류 전체보기 85

[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, ..

Gradle 버전에 따른 lombok 추가 방법 - Gradle 6 이상 버전에서도 lombok 오류 나지 않게 하려면

Gradle 버전에 따른 lombok 라이브러리 추가 방법 스프링 부트와 AWS로 혼자 구현하는 웹서비스 책을 이용해 실습을 진행하던 중, 74 페이지에서 오류가 나서 그 원인을 살펴보았다. Gradle 버전에 따라서 build.gradle에 의존성을 추가하는 방식이 약간씩 달라지기 때문에 생긴 문제였다. 직접 찾아보면서 알게 된, Gradle 버전별 lombok 라이브러리 추가 방법에 대해 설명해보겠다. lombok 라이브러리를 추가한 후에는 1. lombok 플러그인을 설치하고 2. Settings > Build > Compiler > Annotation Processors 에서 Enable annotation processing 을 체크해야 롬복을 사용할 수 있다. Gradle 버전 확인하기 우선 ..

백준/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..

해싱 오버플로우 해결법; 개방주소법과 재해싱, 체이닝

해싱이란 ? 키값으로 직접 배열에 접근하는 것이 아니라, 키값을 해시 함수에 넣어서 나온 해시값을 가지고 해시테이블에 접근하여 원소를 탐색, 삽입, 제거하는 기법 예를 들어 array, binary, bubble, file, digit, direct, zero, bucket을 저장하려고 할 때, 첫 번째 글자를 키값으로 사용하여 a는 0, b는 1, c는 2와 같은 해시값을 할당한다. 해시값은 해시 테이블의 인덱스, 버킷 번호에 해당하기 때문에 각각의 값을 순서대로 삽입하면 해시 테이블은 다음의 그림과 같이 구성된다. 'bucket'은 주어진 슬롯이 다 찼기 때문에 해시 테이블에 삽입할 수 없고, 이와 같은 현상을 오버플로우라고 한다. 이러한 오버플로우를 해결하는 방법에는 크게 1. 개방주소법 , 2. ..

CS/자료구조(DS) 2021.04.20

백준/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 >..

AVL 트리(높이 균형 이진 탐색 트리) 개념과 삽입 연산

이진 트리, 이진 탐색 트리 개념 참고 : hyunah-home.tistory.com/entry/%EC%9D%B4%EC%A7%84%ED%8A%B8%EB%A6%AC%EC%9D%98-%EC%84%B1%EC%A7%88-%EC%9A%B4%ED%96%89%EA%B3%BC-%EC%9D%91%EC%9A%A9-%EC%88%98%EC%8B%9D%ED%91%9C%ED%98%84-%ED%8A%B8%EB%A6%AC-%EC%9D%B4%EC%A7%84%ED%8A%B8%EB%A6%AC%EB%A1%9C%EC%9D%98-%EB%B3%80%ED%99%98%EB%B2%95-%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89%ED%8A%B8%EB%A6%AC 이진트리의 성질, 운행과 응용; 수식표현 트리, 이진트리로의 변환법,..

CS/자료구조(DS) 2021.04.17