본문 바로가기

CS/Algorithm90

[BOJ][C++] 15686 치킨배달 [BOJ][C++] 15686 치킨배달 풀이 1. 치킨 좌표와 집 좌표를 분류해서 vector에 넣어줍니다. 2. m개의 치킨 집을 선택합니다. 3. 집마다 가장 가까운 치킨집의 거리를 구해 치킨 거리를 구합니다. DFS를 이용해서 풀었습니다. 백트래킹을 이용해서 풀었습니다. 다른 풀이 방법들을 찾아보다가 조합을 이용하는 방법이 눈에 띄어서 조합으로도 풀어보았습니다. 조합을 이용하니 더 빠른 속도로 구현 되더라구요. 코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; int n, m; int res = 987654321, del; int map[51][51]; vector chicken; vector hous.. 2019. 6. 13.
[SWEA][C++] 5650 핀볼게임 [SWEA][C++] 5650 핀볼게임 문제 5650 [SW모의역량테스트] 핀볼게임 풀이 0인 모든 칸에서 핀볼을 던지고 탐색을 했습니다. 6개의 경우를 나눠서 다음 칸으로 이동할 수 있게 구현했어요. 다음 좌표의 값에 따라 여섯개의 경우는 이렇게 나뉩니다. 1. 벽을 만나면 무조건 오던 길을 다시 되돌아가기 때문에 (n*2)+1로 값을 구하고 return 2. 처음 시작한 위치와 값이 같은 경우 : max값 구해서 return 3. 0인 경우 : 방향 유지해서 이동 4. 1~5 값인 경우 : 방향 바꾸고 점수 더해서 이동 5. 6~10 값인 경우 : 웜홀, 이동할 웜홀 좌표를 찾은 뒤 바꿔서 이동 이렇게 구현하였습니다. 방향의 경우 헷갈려서 하나하나 그린 뒤 구현했습니다. 코드 #define _CRT_.. 2019. 3. 28.
[SWEA][C++] 2117 홈방범서비스 [SWEA][C++] 2117 홈방범서비스 문제 SW Expert Academy 2117 홈방범서비스 (출처 : https://www.swexpertacademy.com/main/main.do) 풀이 범위때문에 머리가 아팠던 문제입니다ㅠㅠ 범위에 주의해서 다시 풀어봐야겠어요. 우선 범위에 따른 비용은 고정이기 때문에 미리 구하도록 합니다. 그 다음, 칸마다 범위를 넓혀가면서 범위값(dis)에 따른 집의 수를 구해주는데 이는 bfs로 넓혀가기때문에 visited배열로 측정한 거리를 활용하면 됩니다. 범위를 모두 넓힌 후 (k*k+(k-1)*(k-1)) - (m * 집의 수) 값을 계산해야 합니다. 이 값은 dis배열의 범위를 넓히며 sum값을 구한 뒤 위 (k*k+(k-1)*(k-1)) - (m * 집의 .. 2019. 3. 9.
[SWEA][C++] 1767 프로세서 연결하기 [SWEA][C++] 1767 프로세서 연결하기 문제 SW Expert Academy 1767 프로세서 연결하기 풀이 처음에 풀었을 때 시간초과가 나서 다시 풀었던 문제 입니다. 구조체를 이용해서 벽 근처에 있는 경우와 아닌 경우를 구분해서 입력을 받아요. 이후 DFS를 이용해서 답을 구하는데 코어 위치에서 네 방향 모두 node를 놓고 연결이 될 경우 다음 node로 넘어가도록 합니다. 사방이 막힌 경우는 그냥 넘어갈 수 있도록 변수 하나를 놓고 체크하도록 해야 합니다. 안그러면 마지막 테스트 케이스가 넘어가지 않더라구요. node를 놓는 과정에서 몇 개를 놓는지 체크할 필요가 있는데 이건 참조변수를 이용했습니다. 갯수를 다른 node에 부딪히거나 다른 core에 부딪히면 이 값을 이용해 node를 회.. 2019. 3. 7.