Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions 20230329카펫/src/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
public class Solution {
public void test() {
System.out.println(getBrown(3, 3) == 8);
System.out.println(getYellow(3, 3) == 1);
System.out.println(getYellow(4, 4) == 4);
}

public int[] solution(int brown, int yellow) {
test();

int width = 3;
int height = 3;

while (!(getBrown(width, height) == brown) && !(getYellow(width, height) == yellow)) {
width += 1;

if (getBrown(width, height) > brown) {
height += 1;
width = height;

continue;
}

if ((getBrown(width, height) == brown) && (getYellow(width, height) != yellow)) {
height += 1;
width = height;
}
}

return new int[]{width, height};
}

public int getBrown(int width, int height) {
return width * 2 + ((height - 2) * 2);
}

public int getYellow(int width, int height) {
return (width - 2) * (height - 2);
}
}
56 changes: 56 additions & 0 deletions 20230329카펫/💡-how-to-solve-it-.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
### 1. 이해
> 아래의 질문에 대한 답변이 녹아 있어야 한다.

- [ ] 모르는 것은 무엇인가?
- [ ] 주어진 것은 무엇인가?
- [ ] 자료는 무엇인가?
- [ ] 조건은 무엇인가?
- [ ] 조건은 알아내야 하는 것을 찾는데 충분한가?

### 2. 계획
> A) 계획을 세우기 전에 아래와 같은 질문을 던지면 굉장히 유용하다.

- [ ] 관련된 문제를 알고 있는가?
- [ ] 모르는 부분이 유사한 다른 문제를 풀어 본 적이 있는가?
- [ ] 전에 풀어 본 문제를 활용하려면 어떤 보조 요소를 도입해야 되는가?
- [ ] 도움이 될 것 같은 어떤 사실이나 정리를 알고 있는가? (보통은 자료 구조나 수학적 공리 또는 정의가 해당됨)

> B) 계획을 세운 뒤 아래 질문을 통해 한번 더 점검해보자.

- [ ] 자료와 조건은 모두 활용 했는가? (Edge case가 될 조건을 꼭 확인해야 함)

### 3. 실행
> 코딩을 하는 단계! 무조건 Test case부터 먼저 작성해야 한다.
💡 TDD를 같이 하는 이유: Test code를 통해 각 단계가 올바르게 동작하는 것을 증명할 수 있다.

- [ ] 각 단계가 올바른지 명확히 알 수 있는가?
- [ ] 그것이 옳다는 것을 설명할 수 있는가?

### 4. 반성
> 문제를 다 풀고 나서 회고하는 시간을 갖는다. 반성한 부분을 다음 문제 풀이에 반영한다.

- [ ] 다른 방법으로 해결할 수는 없었는가? (이때 다른 사람의 풀이도 참고하면 좋음)
- [ ] 결과나 방법을 다른 문제에 활용할 수 있는가? (유용한 패턴은 따로 정리해두자)

## [카펫](https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=java)
갈색 격자의 수 brown 과 노란색 격자의 수 yellow가 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 반환해라.

### 1. 이해
- 갈색 격자의 수는 8이상 5000이하이다
- 노란색 격자의 수는 1이상 2,000,0000 이하이다
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 길다.

### 2. 계획
- height 의 최소값은 3이다.
- 갈색 격자를 구하는 공식은 길이 * 2 + (높이 - 2) * 2
- 노란 격자를 구하는 공식은 (길이 - 2) * (높이 - 2) * 2
- height = 3, width = 3 부터 brown과 계산된 brown이 동일하거나 보다 많을 때 까지 width를 1씩 추가한다.
- 계산된 brown이 주어진 brown보다 크다면 height를 1 추가하고 width도 height과 같은 값으로 수정한다.
- brown이 계산된 값과 일치할 경우 계산된 yellow가 주어진 yellow와 동일한 경우 width와 height를 반환한다.
- 일치하지 않은 경우 height + 1 widht = height;

### 3. 실행
-

### 4. 반성
-