developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코테파이썬
  • 삼성코테자바준비
  • 삼성코테구현문제추천
  • 삼성코테구현풀이
  • c++ 빌더 패턴
  • 시계열분석
  • 운영체제인터럽트
  • 삼성코테준비
  • AR모형
  • MA모형
  • 삼성코테기출자바풀이
  • 카카오코테
  • 삼성코테자바풀이
  • 삼성코테파이썬풀이
  • 시계열
  • Arima
  • ARIMA모형
  • 카카오코테java풀이
  • 삼성코테파이썬준비
  • 통계학
  • 데이터분석
  • 삼성코테자바꿀팁
  • c++디자인패턴
  • SW역량테스트파이썬
  • 삼성코테기출
  • SW역량테스트파이썬풀이
  • 통계분석
  • BOJ파이썬풀이
  • 백준파이썬풀이
  • 삼성코테파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

프로그래머스 코딩테스트 연습 - 여행경로 (JAVA)
알고리즘/알고리즘문풀

프로그래머스 코딩테스트 연습 - 여행경로 (JAVA)

2022. 11. 29. 15:31

❓ 문제 - 프로그래머스 코딩테스트 연습 여행경로- JAVA 풀이법

출처

(https://school.programmers.co.kr/learn/courses/30/lessons/43164)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

📝 문제해결법

1. 문제

  • tickets의 각 행 [a, b]에서 a공항에서 b공항으로 항공권이 있다는 의미
  • ICN 항공에서 출발해서 모든 tickets를 한번씩 쓰며 모든 도시를 방문할 때 방문 순서를 구하여라
  • tickets중 출발지점이 같으며 도착지가 다른 여러 항공권이 있을 경우 도착지의 알파벳 순서가 더 빠른 순서를 먼저 들려야 함

 

2. 해결 방법

  • DFS 방식으로 모든 도시를 방문할 경우를 탐색한다.
  • 처음 출발지점은 ICN이고, dfs내에서 tickets의 출발지가 같고, 아직 방문하지 않은 곳이라면 그 도착지를 방문하며 그곳을 다시 출발지점으로 한다.
  • 공항 지점을 들르면서 들른 공항에 대한 정보를 str에 빈칸을 띄운 상태로 저장하고, 만약 모든 공항을 들렀을 경우 list에 넣어준다.
  • 마지막에 모든 dfs 탐색이 끝난 후에 Collections으로 list를 정렬하면 ICN을 시작점으로 모든 공항을 가는 경우 중  출발지점이 같으며 도착지가 다른 여러 항공권이 있을 경우 도착지의 알파벳 순서가 더 빠른 순서를 구할 수 있게된다.   

 

3. 느낀점

  • 완전탐색이라는 것을 찾고, 출발지점과 도착지점을 분리해서 생각하며 Comparable인터페이스로 정렬을 생각해서 문제가 안 풀렸다. 
  • 며칠 끙끙 노력하다가 다른 사람들의 코드를 참조하니, tickets를 출발지, 도착지를 나누어서 구현에 적용하는 것이 아니라 어차피 도착지 기준으로 처리하면 똑같기 떄문에  tickets를 이용해서 dfs에 적용했다.
  • 풀이만 보고 생각대로 바로 코드를 짜니 코드도 간결해지고 정렬에 대해 많이 고민한 부분도 쉽게 해결되었다..

 

 

💻 소스코드 (JAVA)

import java.util.*;

class Solution {
    public static int cnt;
    public static ArrayList<String> list = new ArrayList<>();
    public static boolean[] visited;
    public static String[][] ticket;
    public String[] solution(String[][] tickets) {
        visited = new boolean[tickets.length];

        ticket = tickets;
        dfs("ICN", "ICN", 0);
        
        Collections.sort(list);
        return list.get(0).split(" ");
    }
    
    
    public static void dfs(String t, String str, int depth){ 
       if(depth == ticket.length){
           list.add(str);
           return;
       }
       for(int i=0;i<ticket.length;i++){
           if(!visited[i] && ticket[i][0].equals(t)){
               visited[i] = true;
               dfs(ticket[i][1], str+" "+ticket[i][1], depth+1);
               visited[i] = false;
           }
       } 
        
    }

}

'알고리즘 > 알고리즘문풀' 카테고리의 다른 글

BOJ - 거짓말 1043번 (JAVA)  (0) 2022.12.06
2022 KAKAO TECH INTERNSHIP - 등산코스 정하기 (JAVA)  (0) 2022.12.01
프로그래머스 코딩테스트 연습 - 카펫 (JAVA)  (0) 2022.11.22
프로그래머스 코딩테스트 연습 - 디스크컨트롤러 (JAVA)  (0) 2022.10.30
2022 KAKAO TECH INTERNSHIP - 두 큐 합 같게 만들기 (JAVA)  (0) 2022.10.23
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • BOJ - 거짓말 1043번 (JAVA)
    • 2022 KAKAO TECH INTERNSHIP - 등산코스 정하기 (JAVA)
    • 프로그래머스 코딩테스트 연습 - 카펫 (JAVA)
    • 프로그래머스 코딩테스트 연습 - 디스크컨트롤러 (JAVA)
    developer-ellen
    developer-ellen

    티스토리툴바