🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import java.util.*;
class Solution {
public int solution(int N, int number) {
List<Set<Integer>> setList = new ArrayList<>();
for(int i = 0 ; i < 9 ; i++) setList.add(new HashSet<>()); // 개수 별 HashSet 생성
setList.get(1).add(N); // 1은 본인만 만들 수 있음
if(number == N)
return 1;
for(int i = 2 ; i < 9 ; i++) {
for(int j = 1 ; j <= i / 2 ; j++) {
unionSet(setList.get(i), setList.get(i - j), setList.get(j));
unionSet(setList.get(i), setList.get(j), setList.get(i - j));
}
// 연속된 숫자 넣기
String str = Integer.toString(N);
setList.get(i).add(Integer.parseInt(str.repeat(i)));
for(int num : setList.get(i)) {
if(num == number)
return i;
}
}
return -1;
}
// 두 Set의 값 간 사칙연산 계산 메소드
private static void unionSet(Set<Integer> union, Set<Integer> a, Set<Integer> b) {
for(int n1 : a) {
for(int n2 : b) {
union.add(n1 + n2); union.add(n1 - n2); union.add(n1 * n2);
if(n2 != 0) union.add(n1 / n2);
}
}
}
}
|
cs |
🧩 해결 아이디어
• DP - Set을 활용한 메모이제이션
1) 숫자 N의 사용하는 갯수 별로 만들 수 있는 통 생성 (1~8까지)
2) 칸 숫자가 N인 경우, 합이 N이 되는 숫자 2개의 값 이용 (1+4 / 2+3 / 3 + 2 / 4 + 1 이런 식으로)
3) 각 통마다 연속된 숫자를 넣어줌 (Set 활용해 각 통마다 중복값 제거)
💥 유의사항
- 괄호 연산 때문에 양방향 다 계산해줘야하고, 연속된 숫자를 통마다 넣어줘야 한다.
- 통에 들어간 값은 중복되어서는 안 된다.
🔺 다른 풀이들
- Set 배열 활용, 연속수 넣는 방식 (* 10), 정답 얻는 방식(contains 활용) 이렇게 크게 총 3가지가 좀 다르다.
[동적계획법] N으로 표현 - Java 코드 ★★★(★★)
https://programmers.co.kr/learn/courses/30/lessons/42895?language=java 코딩테스트 연습 - N으로 표현 programmers.co.kr 문제 이해 DP는 메모이제이션이 필요하다. 해당 문제에서 이전단계에 대한 메모이제이션을 위해
bangu4.tistory.com
- 엥 DFS로 푸셨다ㅏ.... ㄴㅇㄱ
[알고리즘] 프로그래머스 - N으로 표현 - JAVA
https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 /
easybrother0103.tistory.com
💬 느낀 점
1시간 정도 고민해보고 풀었는데 못 풀었다...
Set 아이디어, 문자열로 생각해서 반복하는 아이디어는 혼자서 생각 못 했을 것 같다.
문제를 많이 안 풀었다는 것이겠지ㅎㅎ
분발하장,,,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[프로그래머스] N으로 표현-JAVA
문제 링크 https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr Dynamic Programming(동적 계획법)을 이용하여 풀었다. 풀이 방식 개인적으로 로직을 짜기 제일 까다
born2bedeveloper.tistory.com
https://velog.io/@doxxx93/programmers-pracice-42895
[프로그래머스] N으로 표현 - JAVA [자바]
[프로그래머스] N으로 표현 - JAVA [자바]
velog.io
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 프로세스 (JAVA) (1) | 2023.10.10 |
---|---|
[프로그래머스/Lv. 2] 멀리 뛰기 (JAVA) (1) | 2023.10.08 |
[프로그래머스/Lv. 2] 3 x n 타일링 (JAVA) (0) | 2023.10.05 |
[프로그래머스/Lv. 2] 순위 (JAVA) (0) | 2023.10.05 |
[프로그래머스/Lv. 2] 2 x n 타일링 (JAVA) (0) | 2023.10.02 |