Algorithm/BAEKJOON

[백준 BOJ] 15650 N과 M(2) (python)

DongKeun2 2022. 3. 4. 21:33

문제 출처 : https://www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

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

www.acmicpc.net

 

🔥 작성 코드

N, M = map(int, input().split())
lst = [_ for _ in range(1, N+1)]
arr = []
for i in range(1<<len(lst)):
    cnt = 0
    result = []
    for j in range(len(lst)):
        if i != 0:
            if i & (1<<j):
                cnt += 1
                result.append(lst[j])
                if len(result) > M:
                    break
    if len(result) == M:
        arr.append(result)

arr.sort()
for i in range(len(arr)):
    print(*arr[i])

⭕ 해설

  1. 비트연산자를 활용하여 풀었습니다.
  2. 처음에는 arr를 만들지 않고 result를 바로바로 출력했는데 틀렸습니다.
    • 만약 4 2 가 들어왔다면 비트연산자로 len(result)가 2가 되는 값의 순서는 다음과 같습니다.
    • 0011 => 1 2
    • 0101 => 1 3
    • 0110 => 2 3
    • 1001 => 1 4
    • 1010 => 2 4
    • 1100 => 3 4
    • 문제에서는 1 4 보다 2 3이 먼저 출력되면 안되므로 오답입니다.
  3. 그래서 result의 원소가 2개가 될 때마다 arr에 저장해두고 순서대로 정렬시킨 뒤 출력하였습니다.

 


비트연산자 관련 문제

2022.02.15 - [Algorithm/SWEA] - [SWEA 2817] 부분 수열의 합

 

[SWEA 2817] 부분 수열의 합

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7IzvG6EksDFAXB&categoryId=AV7IzvG6EksDFAXB&categoryType=CODE&problemTitle=%EB%B6%80%EB%B6%84&orderBy=FIRST_REG_DATETIME..

dongkeun2.tistory.com

 

N과 M(1)

2022.03.04 - [Algorithm/BAEKJOON] - [백준 BOJ] 15649 N과 M(1) (python)

 

[백준 BOJ] 15649 N과 M(1) (python)

문제 출처 : https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출

dongkeun2.tistory.com

 

 

 

 

'Algorithm > BAEKJOON' 카테고리의 다른 글

[백준 BOJ] 15652 N과 M(4) (python)  (0) 2022.03.04
[백준 BOJ] 15651 N과 M(3) (python)  (0) 2022.03.04
[백준 BOJ] 15649 N과 M(1) (python)  (0) 2022.03.04
[백준 BOJ] 1063 킹 (python)  (0) 2022.02.24
[백준 BOJ] 1091 카드 섞기  (0) 2022.02.24