기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - SWEA/D4

[SW expert Academy] SWEA 1211번 Ladder2 자바(Java)

2023. 12. 30. 02:45

[D4] [S/W 문제해결 기본] 2일차 - Ladder2 - 1211

문제 링크

성능 요약

메모리: 31,400 KB, 시간: 144 ms, 코드길이: 2,236 Bytes

제출 일자

2023-12-30 02:42

 

풀이 방법

1. 출발 지점에서 사다리 발견시 dfs로 내려가준다.

2. 내려가면서 count

3. 내려가는 도중 오른쪽,왼쪽에 사다리 발견시 이동하면서 Count

4. 맨 아래까지 내려간 뒤 더 적거나 같으면 갱신해준다.(가장 큰 값을 출력하라고 했으므로)

출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

import java.util.StringTokenizer;
import java.io.InputStreamReader;
import java.io.BufferedReader;

class Solution {
    static int[][] map;
    static int distance, answer;

    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        int T = 10;
        for (int tc = 1; tc <= T; tc++) {
            br.readLine();
            // 사다리 배열
            map = new int[100][100];
            for (int i = 0; i < map.length; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < map.length; j++) {
                    map[i][j] = Integer.parseInt(st.nextToken());
                }
            }
            // distance : 최소값을 구하기 위해 최대값으로 초기화
            distance = Integer.MAX_VALUE;
            answer = 0;
            // 출발 지점 마주치면 시작
            for (int i = 0; i < map.length; i++) {
                if (map[0][i] == 1) {
                    dfs(i);
                }
            }
            sb.append("#" + tc + " " + answer).append("\n");
        }
        System.out.println(sb);
    }

    private static void dfs(int start) {
        // (0,start)에서 시작
        int x = 0;
        int y = start;
        // 총 이동거리를 저장 할 count
        int count = 0;
        // map 거리만큼 이동
        while (x < map.length) {
            // 왼쪽에 사다리 존재시 쭉 이동한다.
            if( y - 1 >= 0 && map[x][y-1] == 1){
                while(y - 1 >= 0 && map[x][y-1] == 1){
                    y--;
                    count++;
                }
            }
            // 오른쪽에 사다리 존재시 쭉 이동해준다.
            else if (y + 1 < map.length && map[x][y + 1] == 1) {
                while (y + 1 < map.length && map[x][y + 1] == 1) {
                    count++;
                    y++;
                }
            }
            // 이동 후 한칸 내려감과 동시에 count++
            x++;
            count++;
        }

        // distance 갱신 가능하다면 해줌.
        if (distance >= count) {
            distance = count;
            answer = start;
        }
    }
}

'알고리즘 - SWEA > D4' 카테고리의 다른 글

[SW expert Academy] SWEA 1219번 길찾기 자바(Java)  (0) 2024.01.02
[SW expert Academy] SWEA 1218번 괄호 짝짓기 자바(Java)  (0) 2024.01.02
[SW expert Academy] SWEA 7465번 창용 마을 무리의 개수 자바(Java)  (0) 2023.12.27
[SW expert Academy] SWEA 1868번 파핑파핑 지뢰찾기 자바(Java)  (0) 2023.11.18
[SW expert Academy] SWEA 1210번 Ladder1 자바(Java)  (0) 2023.11.18
    '알고리즘 - SWEA/D4' 카테고리의 다른 글
    • [SW expert Academy] SWEA 1219번 길찾기 자바(Java)
    • [SW expert Academy] SWEA 1218번 괄호 짝짓기 자바(Java)
    • [SW expert Academy] SWEA 7465번 창용 마을 무리의 개수 자바(Java)
    • [SW expert Academy] SWEA 1868번 파핑파핑 지뢰찾기 자바(Java)
    기몽수
    기몽수

    티스토리툴바