소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 패스트캠퍼스
  • 패스트캠퍼스후기
  • 패캠챌린지
  • 백준
  • 코드스테이츠
  • 직장인자기계발
  • 직장인인강
  • 문제
  • 알고리즘
  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Programmers] 여행 경로 - Java

2022. 2. 18. 15:33

Level 3

 

코딩테스트 연습 - 여행경로

[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]

programmers.co.kr

 

문제 풀이

BFS도 나올 줄 알았는데.. 이것도 DFS ㅎ

이번 문제는 시작 지점이 인천으로 고정되어 있기 때문에 그 부분을 주의해서 초기 값을 넣어주고 마찬가지로 재귀함수를 돌려주면 된다. 티켓의 사용여부를 표시하기 위해 visited 리스트를 만들어주고 count 변수로 사용한 티켓 수를 확인할 수 있도록 해줬다.

 

route를 저장하고 정렬하는 부분에서 헤매서 구글링을 했는데 정말,, 아직 난 갈길이 멀다. 문자열로 이어 붙인 다음 리스트에 추가하고 Collections.sort()를 이용해 정렬해서 맨 앞의 요소를 가져온다.  가져온 경로를 split으로 쪼개서 반환하면 끝!

방법은 이 블로그를 참고했다.

 

 

코드

import java.util.ArrayList;
import java.util.Collections;

class Solution {
    ArrayList<String> allRoute; 
	boolean[] visited;
	
	public void dfs(String start, String[][] tickets, boolean[] visited, String route, int count) {
		// 모든 티켓을 사용한 경우
		if (count == tickets.length) {
			allRoute.add(route);
			return;
		}
		
		for (int i=0; i<tickets.length; i++) {
        	if (!visited[i] && tickets[i][0].equals(start)) {
	        	visited[i] = true;
	        	dfs(tickets[i][1], tickets, visited, route + " " + tickets[i][1], count + 1);
	        	visited[i] = false;
	        	}
        }
	}
	
	public String[] solution(String[][] tickets) {
		String[] answer = {};
        visited = new boolean[tickets.length]; // 티켓 사용 여부
        allRoute = new ArrayList<String>();
        int count = 0;
        
        // 시작지점은 무조건 인천
        dfs("ICN", tickets, visited, "ICN", count);
        Collections.sort(allRoute);
        answer = allRoute.get(0).split(" ");
        
        return answer;
    }
}
728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Baekjoon] 17142번 : 연구소 3 - Python  (0) 2022.02.25
[Baekjoon] 23288번 : 주사위 굴리기 2 - Python  (0) 2022.02.22
[Programmers] 단어 변환 - Java  (0) 2022.02.18
[Programmers] 네트워크 - Java  (0) 2022.02.18
[Programmers] 타겟넘버 - Java  (0) 2022.02.17
    소토
    소토

    티스토리툴바