본문 바로가기

Problem solving70

[Programmers] 여행경로 (C++) 문제 주어진 항공권을 모두 이용해서 여행경로 짜기 항상 ICN공항에서 출발 가능한 경우가 여러가지 있다면 알바벳 순의 경로를 리턴 생각할 것 ICN에서 출발 주어진 항공권을 모두 사용하기 위해 백트래킹 사용하기 코드 #include #include #include #include using namespace std; vector visited; vector routes; vector route; void dfs(int ticketNum, vector tickets) { if(route.size() == tickets.size()) { route.push_back(tickets[ticketNum][1]); // 마지막 도착지점을 추가해주고 routes.push_back(route); route.pop_ba.. 2023. 7. 5.
[Programmers] 단어 변환 (C++) 문제 두 개의 단어 begin, target과 단어의 집합 words가 주어진다. 아래의 규칙으로 begin에서 target으로 변환하는 가장 짧은 변환 과정 찾기 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예시 ) begin : “hit” target : “cog” words : ["hot","dot","dog","lot","log","cog"] 변환 과정 : "hit" -> "hot" -> "dot" -> "dog" -> "cog” 생각할 것 백트래킹을 사용해서 모든 경우를 탐색 발견한 최소 탐색거리보다 크면 더 이상 탐색을 진행하지 않음 단어가 하나만 다른지 체크 코드 #include #include #include #include us.. 2023. 7. 5.
[Programmers] 게임 맵 최단거리 (C++) 문제 상대 팀 진영에 도착하기 위해 지나가야 하는 칸의 최소 개수 찾기 도착할 수 없는 경우에는 -1 리턴 1은 지나갈 수 있는 곳, 0은 지나갈 수 없는 곳 생각할 것 최단거리를 구하는 것이므로 BFS 이용하기 코드 #include #include #include using namespace std; int dx[4] = {-1, 1, 0, 0}; // 상하좌우 int dy[4] = {0, 0, -1, 1}; int solution(vector maps) { int answer = -1; int n = maps.size(); int m = maps[0].size(); vector visited(n, vector(m)); queue q; // 상대 진영에서 시작 q.push({n-1, m-1}); vis.. 2023. 7. 5.
[Programmers] 징검다리 (C++) 문제 출발지점부터 distance만큼 떨어진 곳에 도착지점이 있음 rocks배열 중 n개를 제거했을 때 각 지점 사이 거리의 최솟값 중 가장 큰 값은? 생각할 것 mid : 각 지점 사이의 최대 거리를 의미 가장 가까운 돌과의 거리를 mid와 비교하고 더 작으면 돌을 빼준다. 돌을 뺀 갯수가 빼야하는 개수보다 크면 목표 거리를 줄임 돌을 뺀 갯수가 뺴야하는 개수보다 작으면 돌을 더 놓을 수 있으므로 목표 거리를 늘림 코드 #include #include #include using namespace std; int solution(int distance, vector rocks, int n) { vector r(rocks.size(), true); int answer = 0; int left = 0; in.. 2023. 7. 4.