저번에 시험 본거 유사 문제를 Gemini에게 추천 받아서 주말마다 풀고 있었는데, 2레벨 문제도 제대로 못 푸는데 3, 4 레벨 문제는 도저히 엄두가 안나서 주말 마다 푸는 연습 문제중에서 어렵다고 느꼈던 문제를 골라서 정리 하기로 했다.
| 8일차 |
|---|
 |
문제 소개
- a, b, c, d는 1~6의 수
- 같은 수가 4개일 때, 1111 * p
- 같은 수가 3개일 때, (10 * p + q) ^ 2
- 같은 수가 2개 씩 같은 때, (p+q) * |p-q|
- 같은 수가 2개일 때, q * r
- 같은 수가 없을 때, 최소 값
나의 문제 풀이
- 같은 수의 개수를 int형 변수를 만들어서 세고
- p의 값은 같은 수의 개수를 셀때 저장
- q와 r의 값을 판다하는 방법이 문제였는데, 이는 List에 a, b, c, d를 저장하고 p값을 제거하는 방식으로 해결했다.
- 최소 값은 List의 Min값을 이용했다.
- 내 능력이 부족해서 코드가 조금 부족하게 나온 것 같다.
다른 사람 풀이
프로그래머스에서 좋은게 다른 사람의 풀이를 보면서 공부할 수 있다는게 좋았다.
오늘 푼 문제에서 인상 깊었던 풀이 두 가지를 해석해보았다.
| 다른 사람 풀이1 |
|---|
 |
- Linq 문법을 활용해서 가독성을 높인 풀이이다.
- 성능은 조금 느리지만, c#의 장점을 잘 활용한 듯 하다.
- 주사위 값을 Key, 값의 개수를 Value로 생각하는 Dictionary형태로 만들어서 코드를 작성하셨다.
- 값의 개수 순으로 정렬이 되어서 p, q, r 값을 쉽게 만든게 인상 깊었다.
| 다른 사람 풀이2 |
|---|
 |
- 가장 잘 풀었다고 생각되는 풀이였다.
- 주사위 수를 배열의 인덱스 번호로 활용하고 카운팅 하였다.
- 하나의 반복문으로 주사위 수와 카운팅 처리를 쉽게 하였다.
소감
게임 쪽를 다루고 있다보니 C#를 사용하면서도 성능을 우선시하는 풀이가 인상 깊었다. 나도 저런 코드를 만들 수 있으면 좋겠다.