
🚩 브루트포스, 백트래킹 thinking 1. 파이썬 itertools의 조합 기능을 사용해 만들수 있는 리스트의 경우의 수를 구하고 2. for문을 돌면서 해당 경우의 수의 행만 돌면서 나머지 열의 값을 더함 ex. (1,2,3)의 경우라면 1,2,3행을 돌며 1행일 때는 2,3열의 값, 2행일 때는 1,3열의 값, 3행일 때는 1,2열의 값만 더하면 팀의 능력치를 구할 수 있다. 3. sumA, sumB 구한 다음 abs로 차이 구해서 가장 최소값이 답 ❗ 문제는 (1,2,3)-(4,5,6) / (1,4,5)-(2,3,6) 이런식으로 짝을 이루어야하는데 이걸 어떻게 매칭시키는 것인가였다. 근데 대박인게 itertools로 조합 구하면 아래 그림처럼 알아서 순서대로 조합의 경우를 구해서 매칭이 된다. ..

🚩 자료구조, 문자열, 파싱, 덱 thinking 0 ≤ p ≤ 100,000 , 0 ≤ n ≤ 100,000 이라 리터럴리 연산하면 시간초과 날거 같아서 규칙을 찾아봤다. - R이 연속해서 홀수개면 뒤집고, 짝수개면 걍 그대로 - D는 연속한 개수만큼 삭제 => R 홀짝 체킹할 flag변수 만들고, p연산 돌면서 앞에서부터 삭제할 개수랑 뒤에서부터 삭제할 개수 찾아서 삭제 코드 def sol(p, n): flag = 0 # 짝 delete = [0, 0] # 홀이면 뒤집(뒷 숫자 삭제), 짝이면 stay(앞 숫자 삭제) for s in p: if s == 'R' and flag == 0: flag = 1 elif s == 'R' and flag == 1: flag = 0 elif s == 'D' and..
🚩 그리디 thinking [SWEA] 5202-화물도크 랑 똑같은 문제여서 같은 방식으로 풀었다. 시작-끝 시간을 리스트로 받은 다음, 끝나는 시간 순으로 정렬한다. 전회차의 끝 시간보다 다음회차 시작 시간이 같거나 크면 카운팅을 해주면 된다. 시간 때문에 pop(0) 을 안하고 pop() 을 하고 싶어서 내림차순으로 정렬했다. 기억할 것 ⭐ input() 은 매우 느리다. 입력이 10만줄 이상 되면 stdin.readline을 사용하는 것이 좋다. ⭐파이썬 람다 정렬하는 법 # sorted(a, key=lambda x: (-x[1], -x[0])) 정렬결과 [[12, 14], [2, 13], [8, 12], [8, 11], [6, 10], [5, 9], [3, 8], [5, 7], [0, 6], [3..
🚩 분할정복, 재귀 thinking N이 3의 배수이기 때문에 같은 숫자로 안 이루어져 있으면 계속해서 나누면서 -1, 0, 1 의 개수를 구하면 된다. 그래서 같은 숫자로 이루어져 있는지 체크하는 checking 이라는 함수와 9칸으로 행렬을 나눌 divide 라는 함수를 만들어 구했다. 시작행(s_x)과 시작열 (s_y) 을 인자로 하여 함수를 계속 쪼개더라도 값을 확인할 수 있도록 구성했다. 처음 코드를 짤 때 1️⃣과 2️⃣의 순서를 바꿨더니 틀렸다. 일단 어떤 값이 나왔는지를 먼저 체크해야하기 때문에 1️⃣과 2️⃣의 순서로 구성해야한다. 코드 # 같은 숫자로 이루어져 있는지 확인하는 함수 def checking(s_x, s_y, length): # 시작 x, y좌표, 종이 길이 global r..
🚩 BFS thinking 최소 칸수를 구하는 문제이므로 bfs로 해결하자고 생각했다. 코드 풀이 1 visited라는 배열을 만들어 푸는 방법 from collections import deque dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] def bfs(): global visited q = deque() # 큐 만들고 q.append((0, 0)) # 시작점 넣어주고 visited[0][0] = 1 # 값 갱신 while q: # 큐에 값이 있으면 x, y = q.popleft() # 맨 왼쪽 값 빼서 할당하고 for i in range(4): # 사방 탐색하면서 nx = x+dx[i] ny = y+dy[i] # 인덱스가 범위 이내이면서 미로의 값이 1이고 아직 방문하지 않았..
- Python
- merge에러
- 21609 상어 중학교
- 2579 계단오르기
- 삼성기출
- 17406 배열돌리기4
- 브루트포스
- BFS
- 2018 카카오 공채
- dp
- merge 에러
- 백준
- 삼성코테
- 20057 마법사 상어와 토네이도
- 파이썬
- react
- swea
- 프로그래머스
- git 미러링
- 영어끝말잇기
- 20056 마법사 상어와 파이어볼
- 기지국설치
- 알고리즘
- 보석쇼핑
- dfs
- Total
- Today
- Yesterday