import java.util.ArrayList; import java.util.Arrays;
class 프로그래머스_기능개발 {
public static void main(String[] args) {
int[] progresses = {93, 30, 55};
int[] speeds = {1, 30, 5};
System.out.println(Arrays.toString(solution(progresses, speeds)));
}
public static int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 0; i < progresses.length; i++) {
int remain = 100 - progresses[i];
int day = remain / speeds[i];
if (remain % speeds[i] > 0)
day++;
int work = 1;
while (i + 1 < progresses.length
&& progresses[i + 1] + speeds[i + 1] * day >= 100) {
i++;
work++;
}
answer.add(work);
}
return answer.stream().mapToInt(i -> i).toArray();
}
}다음 TDD 세 가지 법칙을 살펴보자
첫째. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.
둘째. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
셋째. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
위 법칙을 따르면 실제 코드가 나오기전에 테스크 코드가 먼저 나온다. 이렇게 일하면 실제 코드를 사실상 전부 테스트하는 테스트 케이스가 나온다.
하지만 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다.각 행은 수식이나 절을 나타내고 일련의 행 묶음은 완결된 생각 하나를 표현 생각 사이에는 빈 행을 넣어 분리 import java.util.ArrayDeque;
class 프로그래머스_캐시 {
public static void main(String[] args) {
System.out.println(solution(3, new String[]{"Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"}));
}
private static int solution(int cacheSize, String[] cities) {
int answer = 0;
ArrayDeque<String> queue = new ArrayDeque<>(cacheSize);
for (String city : cities) {
city = city.toUpperCase();
// hit
if (queue.contains(city)) {
queue.remove(city);
queue.add(city);
answer += 1;
}
// miss
else {
queue.add(city);
if (queue.size() > cacheSize)
queue.poll();
answer += 5;
}
}
return answer;
}
}Queue,deque
무언가를 뺄 때 O(1)의 시간복잡도를 가진다배열과 다르게 전체 크기 (사이즈)가 가변적이나 사이즈를 늘릴때 오버헤드 발생
Array list2장. 의미 있는 이름 2장에서는 변수, 함수, 클래스 등에 붙이는 이름을 잘 짓는 방법에 대해 소개한다.
- 의도를 분명히 밝혀라 의도가 분명한 이름은 정말 중요하다. 좋은 이름을 지으려면 시간이 오래 걸리지만, 좋은 이름으로 절약하는 시간이 더 많다는 것을 기억하자.
var d: Int // 경과 시간 위에서 d는 경과시간을 나타내는 변수이다. 사실 의미없는 변수와 주석의 조합보다는, 의미를 충분히 나타낼 수 있는 변수 하나가 큰 힘을 발휘할 수 있다.공통된 로직을 빼내 함수로 추출하고 변수명을 변경하는 것만으로 프로그램 내부를 직관적으로 파악할 수 있을 만큼 읽기 쉬운 코드로 완성될 수 있다. 그렇다면 함수에 어떤 속성을 부여해서 추출해야지만, 읽는 사람으로부터 직관적이다는 느낌을 받을 수 있을까?
- 작게 만들어라 첫번째는 함수를 작게 만드는 것이다. 클린코드에서는 정말정말 짧은 길이의 함수를 만들고, 그 의미를 명백하게 만들 것을 강조하고 있다.Int 형 2억개 나성나몬
메모리 초과
Int 4byte일주석은 거짓이다
코드로 최대한 표현하라
코딩은 예술, 표현반적인 컴퓨터의 성능
1초 -> 1억 회 연산 0.1초 천만회 연산
제한 시간1. 너무 많은 변수들을 배열 등에 저장할 경우. 2. DFS 등에서 재귀적 호출을 통해 너무 많은 함수들을 호출할 경우. 약 1~5초작은 것에도 충실한 사람이 큰 것에도 충실하다. => 호미로 막을 일을 가래로 막지마라. => 일찍 일어나는 새가 벌레를 잡는다. => 오늘 할 수 있는 일을 내일로 미루지 마라. 좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다. => 일정에 쫓기더라도 대다수 관리자는 좋은 코드를 원한다. => 그들이 일정과 요구사항을 강력하게 밀어붙이는 이유는 그것이 그들의 책임이기 때문이다. => 나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 행동은 전문가답지 못하다. 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드다. 깨끗한 코드는 한가지에 '집중'한다. 깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 다른 사람이 고치기 쉽다.