-
[swea] 1244번: 최대상금 - 파이썬(python)
완전탐색을 이용한 풀이. 갈피를 잡지 못해 다른 분들의 코드를 참고했다. 0번째 인덱스부터 탐색을 시작하는데, 현재인덱스값 이상인 값이 있다면, 현재 인덱스의 값과 교환한다. 그런다음,(현재 탐색중인 인덱스 (i) , 교환횟수+1) 을 dfs 인자로 주고 탐색한다. 만약 교환횟수를 모두 써버렸다면, 최댓값보다 현재 교환된 숫자결과가 더 크다면 갱신한다. 만약, 이미 내림차순 정렬이 되어있어 교환횟수가 남아있는 상태라면, 홀수라면 마지막 1,2번째 인덱스를 바꾸고, 짝수라면 그대로 둔다. 나의 풀이 def dfs(idx, n): global max_val if n == int(cnt): max_val = max(max_val, int(''.join(data))) return for i in range(id..
알고리즘/완전탐색
2022. 11. 14.
-
[swea] 2806번: N-Queen - 파이썬(python)
백트래킹에 대한 문제를 거의 풀어보지 않아서, N-Queen 문제도 처음 접해보았다. BFS 와 대체로 비슷하지만, 더 이상 탐색할 필요가 없는걸 쳐내는 행위를 백트래킹 이라고 한다. 따라서, 한 행씩 퀸을 놓아보는데, 지금까지 같은열 or 대각선에 퀸이 있지 않다면 계속해서 BFS 를 진행하는 것이다. 이때, 한 행씩 퀸을 순서대로 놓기 때문에, 같은 행에 여러 퀸이 놓이는 경우는 고려하지 않아도 된다. row 리스트의 경우, 각 인덱스가 행번호를 의미하고, 각 인덱스값은 열번호를 의미한다. 즉, row의 i번째 행에 있는 값이 j라면, 퀸이 (i,j) 에 위치함을 뜻한다. 또한, visited 리스트를 두어 i번째 열에 퀸이 위치하는지를 확인할 수 있다. 이로 인해, visited[col] 에 이미 ..
알고리즘/DFS, BFS
2022. 11. 13.
-
[swea] 4371번: 항구에 들어오는 배 - 파이썬(python)
모든 배는 1일에 들어온다. 즐거운날은 오름차순으로 정렬이 되어있으므로, 2번째 날짜부터 마지막 날짜까지 탐색하면서 주기를 계산한다. 계산한 주기마다 해당되는 날짜가 ship 집합에 들어있지 않다면 ship 이라는 집합에 추가하고, 배의 개수를 1 증가한다. ex) 즐거운 날 :1 4 6 7 9 10 11 13 16 17 19 첫번째 주기 : 4-1 = 3 ship -> 4,7,10,13,16,19 두번째 주기 : 6-1 = 5 ship -> 4,6,7,10,11,13,16,19 세번째 주기 : 7-1 = 6 -> 이미 ship 에 들어있으므로, 해당 주기의 약수값을 가지는 주기가 이미 존재하는 것이다. 따라서 패스 세번째 주기 : 9-1 = 8 ship -> 4,6,7,9,10,11,13,16,17,1..
알고리즘/이것저것
2022. 11. 7.
-
[swea] 7584번: 자가 복제 문자열 - 파이썬(python)
입력범위가 K(1 ≤ K ≤ 1018) 이므로 모든 P값을 찾으려고 하면 낭패이다. 따라서 규칙을 찾아야 한다. p=“001001100011011...” 으로 진행되는데0인 숫자의 인덱스는 0,1,4,5,7,8,9,12,15,16,17,19,20,24,25,28...1인 숫자의 인덱스는 2,5,6,10,11,13,14,18,21,22,23,26,28,29... 와 같다.따라서 4의 배수면 0의 값이고,4의 배수가 아닌 2의 배수면 1임을 알 수 있다.홀수인덱스의 경우 (i-1)/2 의 값에 따라 결정된다. 나의 풀이 T = int(input()) answer = [] for t in range(1, T+1): k = int(input()) - 1 while k >= 0: if k % 2 == 1: k =..
알고리즘/이것저것
2022. 11. 6.