DFS를 이용하는 문제다.N개의 단어를 입력받아, 각 단어마다 소문자들을 집합으로 만들어 list에 추가 후,DFS로 모든경우를 돌며 해당 idx의 단어집합과 현재까지 집합을 더해 길이가 26(소문자26개)이 되는지 확인하고 26일경우 cnt를 1 올려준다.특정 idx
LCS(Longest Common Subsequence)문제이다. 두 문자(ACAYKP, CAPCAK) 을 S1, S2로 정의하고 dpi를 S1의 i번째와 S2의 j번째 문자위치에서 최대 LCS로 정의한다. S1의 i번째 문자와 j번째 문자가 같다면,dpi-1에
dfs를 이용해 완전탐색한 문제다.i번째와 j번째의 숫자를 위치를 바꿔주고, 만약 (바꾼 숫자만큼의 상금,바꾼횟수)이 이미 존재하면 중복된 경우므로 패스하고 다시 원상복구한다.그리고 바꾼횟수가 C와 같아지면 ans=max(tmp,ans), 혹은 처음 주어진 상금숫자에서
이게 왜 D3일까..?모든변이 N인 평행사변형이 가장 넓이가 넓은 경우는 정사각형이다.
확장 유클리드 호제법을 이용했다.이에 대한 내용은 별도로 작성하겠음..!A,B가 서로소가 아닌경우(최대공약수가 1이 아닌경우) -1 출력 \- 에라토스테네스의 체를 이용해 소수를 구해놓고 나누어 확인그외의 경우 확장 유클리드 호제법 진행
위와같은 퍼즐이 있을 경우, 아래와 같이 상하좌우 1칸씩 0(검은칸)을 늘려준다(맨왼쪽 위를 (1,1), 맨오른쪽아래를 (N,N) 라 하면 (0,0) ~ (N+1,N+1)으로이후, (1,1)부터 (N,N)까지 순회하면서 길이가 K이고 양끝은 0인 공간을 찾아 카운트!
일반적인 물리상식이 통하지않는다...가속 혹은 감속시, 입력이 2개 들어올 경우 C, G 라고 가정하면현재속도에 가속도(그냥 속도의 변화로 본다.. 시간만큼의 가속도 변화가 아니라)를 더하거나 빼주고 그만큼을 이동거리에 더해준다.
후위표기식을 이 문제로 인해 처음 접했다..!\+밖에 없는 첫 후위표기식 문제라 쉬웠다.입력받은 숫자와 +로 이루어진 문자열에서먼저 중위표기식에서 후위표기식으로 변환해준다.숫자인 경우, postfix에 출력\+인경우 \- 스택이 비었을 경우 스택에 i를 push스택이
swea 1222, 계산기1 문제에서 \*연산이 추가되었다.연산에 우선순위가 들어간다.먼저 중위 -> 후위표기식으로 바꿔준다숫자일 경우 바로 post로 출력\+,\*일경우 스택이 비어있을 경우 i를 바로 push스택이 비어있지 않을경우, i와 stack의 top을 비교
후위표기식 3번째 문제이다.swea 1223, 계산기2에서 소괄호 ()가 추가된 문제다.연산과정은 아래와 같다(https://glory-summer.tistory.com/86 을 참고했습니다.)식: 3+(4+5)\*6+7stack: \[]출력(post): 3식
말단부터 올라오면서 연산한다!재귀함수로 1번노드부터 차례로 점점 내려간다만약, x번 노드가 숫자일 경우, 그대로 return 하고연산자일 경우 left, right 로 나눠 재귀로 들어간다.이후, left, right를 연산자에 맞는 연산을 통해 return!
swea 1232, 사칙연산 문제에서 연산이 올바른지 확인하는 문제이다.연산의 결과는 구할 필요가 없고, 연산이 올바르게 진행되는지(계산되는지) 확인하면 된다.안되는 경우는 2가지가 있다i) 상위노드가 연산자(+-\*/)이고, 하위노드가 없을 때,ii) 상위노드가 숫자
단순한 중위순회 문제이다.중위순회란?단순하게 노드와 노드의 왼쪽자손, 오른쪽자손이 주어지고, 노드의 값(문자)가 주어지므로재귀함수로 중위순회 후 return 값들을 다 더해서 출력!
데이터 저장 가이드라인이 있는 아주 친절한(?) 문제이다.하지만 친절은 해로우므로, 별도로 graph 구성을 했다.graphi=이동할 수 있는 노드번호들 로 구성했다.0번부터 출발하여, graph0의 노드번호들을 백트래킹으로 탐험한다.ex)위의 예시에서, 0번(출발지점
(1,1)에서 출발해, 도착지점까지 도달할 수 있는지 확인하는 문제이다.기본적인 BFS문제!(1,1)에서 시작해, 상하좌우(dx,dy)를 탐색한다 (nx,ny)가 0일경우 이동하면서 방문처리한다.(nx,ny)가 3일경우, 결과값을 1로 바꾸고 break!
swea 1226, 미로1에서 미로의 size가 16 -> 100으로 커진 버전이다.똑같은 BFS 알고리즘으로 해결!(1,1)에서 출발해, 상하좌우를 탐색(nx,ny)가 0일경우 방문처리 후 탐색(nx,ny)가 3일경우 결과를 1로 바꾸고 break!
swea, 1227번 미로문제를 응용하는 BFS문제이다.기본적으로 bfs는 방문처리를 하는 visit배열과 주어진 list 배열 2가지를 이용하는데,여기서는 효율성(최소복구비용)을 따져야 하므로 time 배열을 하나 추가했다.즉, 아래에서li배열 -> 해당 x,y지역을
딕셔너리에는 '\[<({'를 넣어두고 확인한다.입력받은 문자열 S를 순회하면서i가 닫는괄호일 경우 \- 여는괄호가 0보다 작으면 결과0, 순회종료여는괄호가 0보다 크면 딕셔너리의 여는괄호값 -1i가 여는괄호일 경우, 딕셔너리에 +1
설명을 안보고 2차원 배열만 보고 무작정 bfs로 접근했다가, 시간낭비..우리가 알고있는 사다리타기 문제다.기본적으로 한 출발지점에서 내려가면서, 좌 or 우 에 경로가 있을 경우 내려가지 않고 건너간다.여기서 좌, 우에 동시에 다리가 있는경우는 없다! 그런사다리타기는
파이썬은 날로먹는 문제다..!1이 A개, 0이 B개일 경우, 무조건 1로 시작해야 하니A=2, B=2 인경우 1ABB , 1BBAA=3, B=5 인경우 1AABBBBB, 1BBBBBAA 의 형태로 가장큰수와 가장 작은수가 나온다무조건 앞에 1이 1개 있어야 된다는 함정
단순한 사다리타기 문제이다.도착점에 도착할 경우, 출발점을 리턴해야한다!그리고, 가로선이 양쪽으로 존재하는 경우는 없다.그러므로, 사다리를 타고 내려가다가(x+=1), 가로선이 있을경우 가로선을 따라 쭉 이동(y+=1)그리고 이동할 가로선이 없을 경우 다시 내려가기!
N마리의 지렁이가 있으면 이중 N/2마리를 출발지렁이, N/2를 도착지렁이로 구분짓는다.그리고 출발지렁이의 좌표값합과 도착지렁이의 좌표값합을 A, B라고 할 경우(Ax-Bx)^2+(Ay-By)^2가 최소가 되게하는 지렁이 조합의 경우의수를 찾으면 됨 한쌍, 한쌍 구해서
주어진 점원들의 키의 합중 B에 가장 가깝고 B보다 크거나 같은 값을 찾는 문제이다.점원들의 부분집합들을 dfs(백트래킹)을 통해 계산하며, 합이 B와같거나 클경우 합과 결과값중 낮은값으로 계속 갱신해준다!
D2급 난이도..위원회 리스트를 순회하면서, 종목을 순회한다.이때, 해당종목의 비용(An)이 위원의 비용(Bn)과 같거나 낮으면 해당 종목의 vote리스트에 +1최종적으로 vote리스트에서 최대값에 해당하는 인덱스+1(0에서 시작하므로)를 리턴!
X가 10이하인 경우, 최약수는 1, 2, 5, 10X가 100이하인 경우, 최약수는 10, 20, 25, 50X가 1000이하인 경우, 최약수는 100, 125, 200, 250, 500X가 10^n (n>3)이하인 경우, 최약수는 100(10(n-2)), 125(1
흰색a줄, 파란색b줄, 빨간색c줄을 색칠하는데, a>=1, b>=1, c>=1, a+b+c=N 이어야 하며 색칠해야하는 값이 최소이어야 한다.먼저, N개의 줄에 대해 각 줄의 W,B,R의 갯수를 구한다.이후 백트래킹으로 2~N-1줄에 대해 B가 색칠될 줄의 경우의 수를
bfs 문제이다.주어진 행렬(li)와 사이즈가 같은 2차원배열 visit을 만들어준다.행렬을 순회하면서 visiti=0이고(방문하지않은곳), lii!=0이면 (i,j)을 deque에 넣어주고 size값을 갱신해준다. \- 대각선으로는 이동하지 않으므로, dx, dy설
막대기와 레이저가 (와 )로 표시된다.'('와 ')' 가 붙어서 '()'이면 레이저, 떨어져있으면 막대이다.()인 레이저가 나오면 idx+=2를 해주고 결과에 stick의 갯수만큼 더한다.(인 막대가 새로 나오면 stick의 갯수를 +1 해준다.)인 막대의 끝이 나오면
N과, NXN의 이차원 배열이 주어진다.이차원 배열은 1,2,3,,,,N의 숫자가 랜덤하게 들어있다.이때, 어느 방 하나를 골랐을때 숫자가 A라면, 상하좌우에 A+1이 존재할 경우 해당방으로 이동하고, 이동을 할 수 없을때까지 이동했을때 이동한 횟수가 최대인 처음시작
모든 단어를 반복문으로 순회각 단어의 구성요소를 키패드값으로 변경 -> S와 일치하는지 확인
BFS를 이용했다.서로를 알고 있는 두사람의 번호 A, B를 이차원 li 배열에 각각 넣어준다. \- liA.append(B) \- liB.append(A) 그리고 모든 정점을 순회하며 visit가 0(방문한적이 없으면)이면 bfs순회 시작\*\* 아무도 모르는
풀이3개의 옷묶음이 있을경우, 그중 가장 작은가격의 옷은 공짜다만약, {5,5,6}처럼 작은가격의 옷이 2개일경우, 1개를 공짜로 친다.즉, 3개의 옷묶음이 있을 경우, 이 묶음에서 가장작은 가격은 최대한 높아야 한다.list를 내림차순으로 정렬 후, 3개씩 묶는다.3
문제 풀이 4x4의 격자판에서, 임의의 한점에서 시작해 상하좌우로 7번 움직여서 만들어지는 문자열의 총 개수를 구하는 문제이다. 이때, 이미 들렀던 장소를 또 들러도 되는것이 중요! 4x4의 각 격자를 순회한다 한 격자에서 출발해, 상하좌우로 1번씩 움직이며 bfs를 순회한다. 이때, 이동한 위치가 격자밖을 나가면 안되며, 7번 다 움직일 경우 딕셔너리...
깨진 타일들을 2x2의 사이즈로 모두 채울 수 있는지 확인하는 문제이다.2차원배열로 주어진 타일들을 순회순회도중 해당위치가 깨진타일일 경우 \- 해당위치로부터 오른쪽, 아래, 오른쪽아래가 2차원배열 범위 안이고 4개타일 전부 깨져있을경우 해당타일들을 전부 '.'로 변
이차원 배열을 전부 순회한다.해당칸이 0(심기가능한 상태)일 경우, 콩을심는다 \- 오른쪽+2칸이 이차원배열 범위 안일경우, -1(심기불가능) \- 아래+2칸이 이차원배열 범위 안일경우, -1(심기불가능)
문자열 A를 순회하면서 B와 첫글자가 같을경우, B의 길이만큼 A에서 슬라이싱해 B와 비교Aidx:len(B)+idx==B일경우 idx+=len(B)해주고 타이핑횟수 +=1다를경우 idx+=1, 타이핑횟수 +=1