백준 15656번 - N과 M (7)

백준 15656번 문제 바로가기 product을 이용한 풀이 중복순열(product)에 대한 문제. 주어진 숫자를 이용해야한다는 조건 말고는 사실상 N과 M(3)과 동일하다. # 입력 import sys from itertools import product n,m = map(int, sys.stdin.readline().split()) arr = sorted(list(map(int, sys.stdin.readline().split()))) # 처리 for ans in product(arr, repeat=m): print(*list(ans)) backtracking을 이용한 풀이 중복순열도 backtracking을 이용해서 풀어보자! 간단하게 N과 M(5) 풀이에서 for문만 지우면 된다ㅎㅎ # 입력 import sys n,m = map(int, sys.stdin.readline().split()) arr = sorted(list(map(int, sys.stdin.readline().split()))) ans = [] # 처리 def backtrack(): if len(ans) == m: print(*list(map(str, ans))) return for i in arr: ans.append(i) backtrack() ans.pop() # return이 실행되면 여기로 돌아옴. (전 단계로 돌아감 = backtrack) backtrack()

2023-7-16 · 1 min · 101 words · Junha

백준 15657번 - N과 M (8)

백준 15657번 문제 바로가기 combinations을 이용한 풀이 python에는 중복조합에 대한 라이브러리도 가지고 있다. 바로 combinations_with_replacement 지난 N과 M (1) 해답에서 combinations만 _with_replacement를 붙여주면 간단하게 해결 가능하다. # 입력 import sys from itertools import combinations_with_replacement n,m = map(int, sys.stdin.readline().split()) arr = sorted(map(int, sys.stdin.readline().split())) # 처리 for ans in combinations_with_replacement(arr, m): print(*list(ans)) backtracking을 이용한 풀이 중복조합을 backtracking으로도 풀어보자! 범위 설정에만 조심한다면 간단하게 풀어낼 수 있게 된다. # 입력 import sys n,m = map(int, sys.stdin.readline().split()) arr = sorted(map(int, sys.stdin.readline().split())) ans = [] # 처리 def backtrack(start=0): if len(ans) == m: print(*list(map(str, ans))) return for i in arr[start:]: ans.append(i) backtrack(arr.index(i)) ans.pop() # return이 실행되면 여기로 돌아옴. (전 단계로 돌아감 = backtrack) backtrack()

2023-7-16 · 1 min · 108 words · Junha

파운데이션 (1권)

제 1, 2, 3 셀던 위기의 조짐과 해결과정을 재밌게 서술한 책. apple tv+ 드라마에서는 느낄 수 없었던 정치적 싸움과 정치계와 경제계의 싸움까지 다각도로 구경할 수 있었다. 능수능란한 말솜씨와 유리한 상황을 만들어내는 탁월한 전략들을 보다보면 어떻게 아시모프 머리에서 이 모든 것이 나왔는지 의문점이 든다. 아시모프가 한국에 태어났다면 삼국지와 조선의 역사 굉장히 재밌어했을듯. 새 새로운 장이 시작할 때마다 파운데이션의 결성체인 ’은하대백과사전’ 의 구절 일부가 제시되고 관련 내용이 등장하는데, 이는 듄(DUNE) 소설의 구성과 유사하다. 마치 성경 구절과 거기에 담긴 뒷이야기를 듣는 듯한 느낌이랄까? 다만 파운데이션 세계관 자체가 시간 및 공간적 스케일이 워낙에 크다보니까 장면 전환이 은하계 끝에서 끝으로 휙휙 이동하고 100년쯤은 우습게 지나가서 새로운 장이 시작될 때마다 긴장하며 정신차리고 읽어야 한다. 또 인간들의 수명 연장도 거의 우리와 유사해서 장이 바뀔때마다 주요인물들도 바뀌고 새로운 인물들이 무더기로 등장하기에 초반에는 천천히 읽는게 낫다. 터미너스를 둘러싼 주변국들의 상황도 급격하게 달라지기에 ‘엥? 얘네 언제 이렇게 세력이 커졌담?’ 생각을 자꾸만 하게 된다 ㅋㅋ ...

2023-7-16 · 2 min · 387 words · Junha

파운데이션 시즌1 (드라마) - Apple tv+

간만에 SF 덕질을 다시 시작했다. 새로운 작품들을 찾던 중에 Apple tv+에서 파운데이션 시리즈가 있길래 시간을 내서 정주행 했다. 시즌1은 10부작으로 완결되었고, 2023년 7월부터 시즌2가 연재되는데, 새로 나올 작품을 기대하면서 일주일 힘차게 살 예정이다. ㅎㅎ 이 드라마는 동명의 원작 소설을 기반으로 만들어졌다. SF의 거장 중 한 사람인 아이작 아시모프의 작품인데, 스케일도 크고 나름의 철학도 담겨있다. 최근에 읽은 책 **아이 로봇**도 아이작 아시모프의 작품인데 직접적인 연계성은 없지만, 미래 세계에 대한 아시모프의 상상력을 엿볼 수 있는 작품이다. ...

2023-7-15 · 3 min · 578 words · Junha

백준 1026번 - 보물

백준 1026번 바로가기 첫 번째 풀이 KMO 같은 수학 경시대회를 풀어본 경험이 있다면, 직관적으로 이 문제를 보자마자 A배열을 오름차순, B배열을 내림차순해서 각 원소를 곱해주면 되겠다는 발상을 떠올릴 것이다. 다음과 같은 코드로 쉽게 문제를 해결할 수 있다. import sys n = int(sys.stdin.readline()) arr_1 = sorted(list(map(int, sys.stdin.readline().split())), reverse=True) arr_2 = sorted(list(map(int, sys.stdin.readline().split())), reverse=False) ans = 0 for i in range(n): ans += arr_1[i] * arr_2[i] print(ans) 두 번째 풀이 다만, 이 문제의 경우 단, B에 있는 수는 재배열하면 안 된다. 라는 제한조건이 걸려있기 때문에 바람직한 풀이는 아니다. 위처럼 A, B배열 모두 정렬해서 제출하더라도 정답처리는 되지만, 출제 의도에 맞게 다시 풀어보자. A배열을 정렬한 상태에서 B에서 최솟값을 하나씩 뽑아내는 방법이다. 결국엔 같은 방법같긴 하지만, 문제의 취지에 맞게 greedy로 풀었다. ...

2023-7-14 · 1 min · 202 words · Junha