너무 파이썬을 안했나보다. 훨씬 파이썬 스러운 코드로 짜보았다.

(1,3) (3,1) 과 같은 중복을 막기위해 시작값을 1에서 -> NUM으로 변경하였다.

N, M = map(int,input().split())
rs=[]




def tnsduf(NUM):
    if len(rs)==M:
        print(" ".join(map(str,rs)))
        return
    for i in range(NUM,N+1):
        if i not in rs:
            rs.append(i)
            tnsduf(i+1)
            rs.pop()
tnsduf(1)
 
 

'취준 > 백준' 카테고리의 다른 글

14889 - 파이썬  (0) 2022.05.02
14888 - 파이썬  (0) 2022.05.01
15649 - 파이썬  (0) 2022.04.05
18870 - 파이썬  (0) 2022.04.04
10814 - 파이썬  (0) 2022.04.04

백트래킹의 기본이다.

젤 처음 백 트래킹을 배웠을 때 pop() 하는게 이해가 안됐던 기억이 있다.

스택을 트리구조로 생각하면 이해하기 쉽다.

이해가 안된다면 결과값을 담을 리스트를 출력해보면 조금 이해하기에 수월하다.

 




import sys



N,M = map(int,input().split())
rs = []
bools = [0] * (N+1)
def tnsduf(sum):
    if sum==M:
        print(' '.join(map(str,rs)))
        return
    for i in range(1,N+1):
        if bools[i]==False:
            bools[i] = True
            rs.append(i)
            tnsduf(sum+1)
            bools[i]=False
            rs.pop()

tnsduf(0)
 
 
 
 
 



import sys



N,M = map(int,input().split())
rs = []
bools = [0] * (N+1)
def tnsduf(sum):
    if sum==M:
        print(' '.join(map(str,rs)))
        return
    for i in range(1,N+1):
        print(rs)
        if bools[i]==False:
            bools[i] = True
            rs.append(i)
            print(rs)
            tnsduf(sum+1)
            bools[i]=False
            rs.pop()

tnsduf(0)
 
 
-----------------------------------------------------------------------------------------------------------------------------------
 
한동안 자바만 썼더니 너무 자바스러운 문법같아서 좀 찾아 봤더니 훨씬 나은 파이썬스러운 코드가 있어 기록한다.
 
 
N, M = map(int,input().split())
rs=[]



def tnsduf():
    if len(rs)==M:
        print(" ".join(map(str,rs)))
        return
    for i in range(1,N+1):
        if i not in rs:
            rs.append(i)
            tnsduf()
            rs.pop()
tnsduf()

'취준 > 백준' 카테고리의 다른 글

14889 - 파이썬  (0) 2022.05.02
14888 - 파이썬  (0) 2022.05.01
15650 - 파이썬  (0) 2022.04.05
18870 - 파이썬  (0) 2022.04.04
10814 - 파이썬  (0) 2022.04.04

첨에 뭔말인지 이해를 못했다.

그냥 예제 케이스보고 순위 나타내라는 거구나 해서 풀어봤다.

리스트 컴프리핸션을 적극적으로 활용해 보았다.

 

import sys

def a():
    a=int(input())
    b=list(map(int,sys.stdin.readline().split()))
    c=list(sorted(set(b)))
    c={c[i]:i for i in range(len(c))}
    print(*[c[i] for i in b])
   
a()

'취준 > 백준' 카테고리의 다른 글

14889 - 파이썬  (0) 2022.05.02
14888 - 파이썬  (0) 2022.05.01
15650 - 파이썬  (0) 2022.04.05
15649 - 파이썬  (0) 2022.04.05
10814 - 파이썬  (0) 2022.04.04
import sys

a=int(sys.stdin.readline().strip())
lists=[]
for i in range(a):
    lists.append(list(sys.stdin.readline().split()))
    lists.sort(key=lambda x:x[0])
for i in range(a):
    print(lists[i][0],lists[i][1])
   





최초 풀이는 위와 같았다.
여기서 두가지 실수를 했다
1) list sort를 반복문 안에서 돌려서 시간 초과가 났고
2)x[0] 기준 ( 나이)으로 잘 접근했으나 int형이 아닌 string형이라서 틀렸다.
 
아래는 최종으로 수정한 답

 

 

 

import sys

a=int(sys.stdin.readline().strip())
lists=[]
for i in range(a):
    lists.append(list(sys.stdin.readline().split()))
lists.sort(key=lambda x:int(x[0]))
for i in range(a):
    print(lists[i][0],lists[i][1])


    






'취준 > 백준' 카테고리의 다른 글

14889 - 파이썬  (0) 2022.05.02
14888 - 파이썬  (0) 2022.05.01
15650 - 파이썬  (0) 2022.04.05
15649 - 파이썬  (0) 2022.04.05
18870 - 파이썬  (0) 2022.04.04

+ Recent posts