목록전체 글 (87)
오르막길
3장함수 책에서 기억하고 싶은 내용의도를 분명히 표현하는 함수를 어떻게 구현할 수 있을까?함수 크기는 작게, 더작게함수는 한가지만 잘해야 한다 (다른 의미있는 이름으로 추출할 수 있다면 여러개)내려가기 규칙 - 위에서 아래로 읽히는서술적인 이름 - 길어도 좋으니 일관성있게부수적인 효과를 일으키지 않도록명령과 조회를 분리오류코드보다는 예외를 사용하기 (그렇지만 try-catch 보다는 해당 블록을 함수로 뽑도록)오류처리도 한가지씩 => try로 시작했다면 catch/finally로 끝내도록중복을 없앤다함수를 어떻게 짜지?서투른 코드를 짠다다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다.메서드를 줄이고 순서를 바꾸고 클래스를 쪼갠다.단위테스트를 항상 통과한다.진짜 목표는 시스템이라는 이야기를 풀어가..
2장의미있는 이름 책에서 기억하고 싶은 내용의도/의미/차이가 분명한, 구분/발음/검색하기 쉬운, 솔직한 이름클래스 이름 : 명사, 명사구메서드 이름 : 동사, 동사구 (접근자: get, 변경자: set, 조건자: is)오늘 읽은 소감처음 했던 유니티 클론코딩 때 controller, manager, driver를 섞어서 썼어서 좋은 습관인 줄 알았는데이 책을 읽어보니 동일 코드 기반에서는 피하라고 하니 앞으로 주의하는 게 좋을 것 같다는 생각이 처음 들었다.어디까지가 매니저고 컨트롤러인지 나도 곰곰히 생각해보니 구분하기 어려운 것 같다.궁금하거나 더 공부해야할 내용헝가리안 표기법: 변수 이름에 그 변수의 타입을 포함시키는 관습intCount (여기서 int는 정수형이라는 것을 나타냄)strName (여기..
추천사 ~ 1장깨끗한 코드 책에서 기억하고 싶은 내용추천사소프트웨어 설계에서 재작업은 가치를 가져온다.설계는 과정이지 고착된 종착점은 아니다0장 들어가면서사례 연구에서 코드를 정리하면서 내린 각 결정과 휴리스틱 사이의 관계를 이해함으로써원칙, 패턴, 실기, 휴리스틱을 자신의 지식으로 만들 수 있도록 깊게 읽어보자1장코드는 요구사항을 명시하는 언어이다.르블랑의 법칙 - 나중은 결코 오지 않는다.기한을 맞추는 유일한 방법은 코드를 최대한 깨끗하게 유지하는 습관이다.문학적 프로그래밍 - 인간이 읽기 좋은 코드중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라.깨끗한 이름/함수/클래스 만드는 법을 소개한다.이 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다.단지 뛰어난 프로그래머가 사용..
문제찬솔이는 블로그를 시작한 지 벌써 𝑁$N$일이 지났다.요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다. 찬솔이는 𝑋$X$일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.찬솔이를 대신해서 𝑋$X$일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자.입력첫째 줄에 블로그를 시작하고 지난 일수 𝑁$N$와 𝑋$X$가 공백으로 구분되어 주어진다.둘째 줄에는 블로그 시작 1$1$일차부터 𝑁$N$일차까지 하루 방문자 수가 공백으로 구분되어 주어진다.출력첫째 줄에 𝑋$X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개..

문제어떤 나라에 N개의 도시가 있다. 이 도시들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 km를 사용한다.처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크기는 무제한이어서 얼마든지 많은 기름을 넣을 수 있다. 도로를 이용하여 이동할 때 1km마다 1리터의 기름을 사용한다. 각 도시에는 단 하나의 주유소가 있으며, 도시 마다 주유소의 리터당 가격은 다를 수 있다. 가격의 단위는 원을 사용한다.예를 들어, 이 나라에 다음 그림처럼 4개의 도시가 있다고 하자. 원 안에 있는 숫자는 그 ..
문제케빈 베이컨의 6단계 법칙에 의하면 지구에 있는 모든 사람들은 최대 6단계 이내에서 서로 아는 사람으로 연결될 수 있다. 케빈 베이컨 게임은 임의의 두 사람이 최소 몇 단계 만에 이어질 수 있는지 계산하는 게임이다.예를 들면, 전혀 상관없을 것 같은 인하대학교의 이강호와 서강대학교의 민세희는 몇 단계만에 이어질 수 있을까?천민호는 이강호와 같은 학교에 다니는 사이이다. 천민호와 최백준은 Baekjoon Online Judge를 통해 알게 되었다. 최백준과 김선영은 같이 Startlink를 창업했다. 김선영과 김도현은 같은 학교 동아리 소속이다. 김도현과 민세희는 같은 학교에 다니는 사이로 서로 알고 있다. 즉, 이강호-천민호-최백준-김선영-김도현-민세희 와 같이 5단계만 거치면 된다.케빈 베이컨은 미..
문제준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.입력첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)출력첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.Codeimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import..
문제 크로스 컨트리 달리기는 주자들이 자연적인 야외의 지형에 만들어진 코스를 달리는 운동 경기이다. 경주 코스는 일반적으로 4에서 12 킬로미터이며, 숲이나 넓은 땅을 통과하는 풀과 흙으로 된 지면과 언덕과 평평한 지형을 포함한다. 이 경기는 주자들의 개인성적을 매기고, 이를 가지고 팀의 점수를 계산한다. 한 팀은 여섯 명의 선수로 구성되며, 팀 점수는 상위 네 명의 주자의 점수를 합하여 계산한다. 점수는 자격을 갖춘 팀의 주자들에게만 주어지며, 결승점을 통과한 순서대로 점수를 받는다. 이 점수를 더하여 가장 낮은 점수를 얻는 팀이 우승을 하게 된다. 여섯 명의 주자가 참가하지 못한 팀은 점수 계산에서 제외된다. 동점의 경우에는 다섯 번째 주자가 가장 빨리 들어온 팀이 우승하게 된다. 예를 들어, 다음의..
문제 방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다. 출력 첫째 줄에 연결 요소의 개수를 출력한다. Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; impo..