https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIsY84KEPMDFAWN 영준이가 카드 게임을 하려고 한다. 게임을 시작하려면 Space, Diamond, Heart, Clover 별로 1~13 숫자를 가진 총 52개의 카드가 있어야 한다. 현재 가지고 있는 카드가 주어질 때 게임을 시작하려면 문양 별로 몇개의 카드가 더 있어야 하는지 구해야 한다. 각 문양별로 해당 숫자의 카드를 가지고 있는지 여부를 card라는 2차원 배열로 두고 boolean 값으로 구분한다. 중간에 카드가 중복되면 ERROR를 출력한다. 1234567891011121314151617181920212223242526272829303..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15QRX6APsCFAYD 지도의 왼쪽 맨 위에서 오른쪽 맨 아래로 이동하는 최단 거리를 구하는 문제이다. 오른쪽이나 아래로만 이동이 가능하면 다이나믹으로 해결가능하지만 상하좌우로 이동 가능하기 때문에 다익스트라로 해결한다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include #include #define INF 987654321using namespace std; int t,n,map[100][100],dist[100][100];int dx[4]..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIseXoKEUcDFAWN 재관이가 옷을 사려고 한다. 세벌씩 묶어서 사면 묶음 중에 제일 싼 옷의 가격만큼 할인받을 수 있다. 사려는 옷들이 있을 때 어떻게 묶어야 가장 싸게 살 수 있는지 구해야 한다. 최대한 비싼 옷들끼리 묶어야 할인 금액이 가장 커짐을 알 수 있다. 가격순대로 정렬을 하고 비싼 옷부터 3개씩 묶어서 해당 묶음 중에서 가장 싼 옷의 가격을 빼 나가면 된다. for문에서 3개씩 건너뛰면 된다. 123456789101112131415161718192021#include #include using namespace std; int main()..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl 실제로 시뮬레이션을 해본다. 매 시간마다 상하좌우에서 현재 위치로 오는 미생물들을 검사하고 다음 상태를 저장한다. 가장자리에서의 예외 처리, 모든 경우의 수 처리, 테스트 케이스마다 초기화에 유의하자. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#include int t,n,m,k,map[100][100]..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V61LqAf8DFAWu#none 서비스 영역의 운영 비용과 해당 영역 내의 집들을 통해 얻는 수익을 비교하여 손해 보지 않을 때 최대 집의 수를 구하는 문제이다. k를 넉넉잡아 1부터 최대 n+1까지 만들어서 서비스 영역의 중앙을 중심으로 해서 도시 전체를 스캔한다. count 함수는 해당 영역 안의 집의 수를 세는 함수이고 valid는 인덱스 범위를 검사하는 함수이다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include #inc..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V4A46AdIDFAWu 가로로 m개 놓을 수 있는 겹치지 않는 두개의 구역을 모두 만들어 본다. getProfit 함수를 이용하여 각 구역 내에서 채취할 수 있는 최대 수익을 구한다. 두개의 구역의 리턴값의 합 중에서 가장 큰 값이 정답이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include #include #include #include using namespace st..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu 재귀를 이용하여 각 행에 대하여 -1(약품 안씀), 0(약품 A 사용), 1(약품 B 사용)의 모든 경우를 만들어서 합격기준을 만족하는지 확인한다. 경우의 수를 만드는 도중 약품 투입 횟수가 현재 답과 같거나 크다면 종료하고 가지치기한다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include #include #include using namespace std; int t,d,w..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu 디저트 카페 투어를 하려고 한다. 카페 종류가 겹치지 않게 사각형을 만들면서 원래 위치로 돌아오는 최대 길이의 경로를 찾아야 한다. 백트래킹을 하면서 모든 경우를 찾아본다. dfs(int x,int y,int l,int d,int c)(x,y) : 현재 위치, l : 지금까지 온 길이, d : 현재 향하는 방향, c: 지금까지 방향을 바꾼 횟수 다음 위치가 처음 출발 위치일 때 l이 4 이상이고 c가 3이나 4이어야 한다. c가 5 이상이면 사각형이 아니므로 탐색을 종료한다. 1234567891011121314151617181920..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlKAQ4DFAUq BFS를 깊이가 L이 될 때까지 돌려준다. 현재 파이프와 다음 파이프를 비교하여 서로 매칭될 수 있는지 확인하면서 예외 처리에 주의한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103#include #include #inc..