해당 문제는 15649번과 동일한 점이 많은 문제입니다. 15649번과 다른 점만을 포스팅할 예정이기 때문에 자세히 알고자 하신다면 해당 링크를 확인해주시기 바랍니다.
https://codingjerk-diary.tistory.com/28
3-3) 15651번 문제
문제링크 : https://www.acmicpc.net/problem/15651
15651번의 input과 output은 다음과 같습니다.
15651번은 input으로 받은 첫번째 값을 n 두번째 값을 m이라고 할때, 각 row는 m개의 숫자(m개의 index)만을 보여주며 각 index가 1에서 n사이의 숫자를 모두 지나며 조합되는 경우를 나타냅니다.
private static void func(String str, int index){
if(index==m){
sb.append(str).append("\n");
return;
}
for(int i=1;i<=n;i++) {
if (!str.equals(""))
func(str+" "+i,index+1);
else
func(str+i,index+1);
}
}
15651번의 func 함수
때문에 i=1부터 n과 같아질 때까지 for문을 돌며 하나의 row에 아직 값이 쌓이지 않았을 경우(str.equals("")) 앞부분에 공백을 두지 않기 위해 func함수로 기존에 쌓아둔 str(= "")에 i를 넣어 str파라미터로 넘겨주고, 다음 index에서 같은 작업을 반복하라고 index+1을 해줍니다. (15649와 동일)
그리고 모든 숫자를 지나며 index를 쌓기 위해 else문에서는 func함수로 기존에 쌓아둔 str에 공백(" ")을 추가하고 i를 넣어 str파라미터로 넘겨주고, 다음 index에서 같은 작업을 반복하라고 index+1을 해줍니다.
조금 더 이해를 돕고자 func함수의 맨 앞에 출력물을 넣어 확인해본 결과 다음과 같습니다.
(출력물 : System.out.println("str : "+str+", "+"index : "+index+"\n"+"sb=\n"+sb.toString()))
=> 3 2를 인풋으로 넣었을 때, 결과는 다음과 같습니다.
str : , index : 0
sb=
str : 1, index : 1
sb=
str : 1 2, index : 2
sb=
str : 1 3, index : 2
sb=
1 2
str : 2, index : 1
sb=
1 2
1 3
str : 2 3, index : 2
sb=
1 2
1 3
str : 3, index : 1
sb=
1 2
1 3
2 3
<결과>
1 2
1 3
2 3
15651번 문제는 여기까지 다루도록 하고 다음에는 15652문제를 포스팅하도록 하겠습니다.
깃 주소 :
https://github.com/Park1122/Algorithm-Study/blob/master/sujeong/bruteforce/BOJ15651.java
'알고리즘(JAVA 사용) > Bruteforce' 카테고리의 다른 글
[알고리즘풀이]백준 1759 : 암호 만들기 JAVA (0) | 2021.07.23 |
---|---|
[알고리즘풀이]백준 1182 : 부분수열의 합 JAVA (0) | 2021.07.23 |
[알고리즘풀이]백준 15652: N과 M(4) 스터디 (15649와 함께 보면 좋음) (0) | 2021.07.11 |
[알고리즘풀이]백준 15650: N과 M(2) 스터디 (15649와 함께 보면 좋음) (0) | 2021.07.11 |
[알고리즘풀이]백준 15649: N과 M(1) 스터디 (15650, 15651, 15652와 input, output동일) (0) | 2021.07.11 |