알고리즘(JAVA 사용)/Bruteforce

[알고리즘풀이]백준 15651: N과 M(3) 스터디 (15649와 함께 보면 좋음)

코찔이_suj 2021. 7. 11. 22:23
728x90

해당 문제는 15649번과 동일한 점이 많은 문제입니다. 15649번과 다른 점만을 포스팅할 예정이기 때문에 자세히 알고자 하신다면 해당 링크를 확인해주시기 바랍니다.

https://codingjerk-diary.tistory.com/28

 

[알고리즘풀이]백준 15649 스터디 (15650, 15651, 15652와 input, output동일)

개요 이번 알고리즘 스터디가 시작되면서 처음 회차로 해당 4개의 문제를 풀어보았습니다. package sujeong.bruteforce; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream..

codingjerk-diary.tistory.com

 

3-3) 15651번 문제

문제링크 : https://www.acmicpc.net/problem/15651

 

15651번: N과 M (3)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

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

 

Park1122/Algorithm-Study

명지대학교 학생들이 모여서 만든 알고리즘 공부 및 코딩테스트 준비를 위한 스터디입니다. Contribute to Park1122/Algorithm-Study development by creating an account on GitHub.

github.com