inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 코딩테스트 - it 대기업 유제

3. "잃어버린 강아지" 코드 해설

if-else를 활용한 코드

257

김김

작성한 질문수 22

0

import java.util.*;
import java.io.*;

public class P03_잃어버린강아지 {

    static int[] dx = {-1, 0, 1, 0};
    static int[] dy = {0, 1, 0, -1};
    public static int solution(int[][] board){
        int px = 0;
        int py = 0;
        int ax = 0;
        int ay = 0;
        int pd = 0;
        int ad = 0;

        for (int i=0; i<board.length; i++) {
            for (int j=0; j<board.length; j++) {
                if (board[i][j]==2) {
                    px = i;
                    py = j;
                } else if (board[i][j]==3) {
                    ax = i;
                    ay = j;
                }
            }
        }

        int answer = 0;
        for (int i=0; i<10000; i++) {
            int npx = px + dx[pd%4];
            int npy = py + dy[pd%4];
            if (!(0<=npx && npx<10 && 0<=npy && npy<10) || board[npx][npy]==1) {
                pd++;
            } else {
                px = npx;
                py = npy;
            }

            int nax = ax + dx[ad%4];
            int nay = ay + dy[ad%4];
            if (!(0<=nax && nax<10 && 0<=nay && nay<10) || board[nax][nay]==1) {
                ad++;
            } else {
                ax = nax;
                ay = nay;
            }

            if (px==ax && py==ay) {
                answer = i+1;
                break;
            }
        }

        return answer;
    }

    public static void main(String[] args){
        int[][] arr1 = {{0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
                {0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
                {0, 0, 0, 1, 0, 0, 0, 1, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 1, 0, 0, 0, 2, 0, 0},
                {1, 0, 0, 0, 0, 0, 1, 0, 0, 0},
                {0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 3, 0, 0, 0, 1},
                {0, 0, 0, 1, 0, 1, 0, 0, 0, 0},
                {0, 1, 0, 1, 0, 0, 0, 0, 0, 0}};
        System.out.println(solution(arr1));

        int[][] arr2 = {{1, 0, 0, 0, 1, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
                {0, 0, 1, 1, 0, 0, 0, 1, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 1, 0, 1, 0, 0, 0, 0},
                {1, 0, 0, 0, 0, 0, 1, 0, 1, 0},
                {0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
                {0, 0, 1, 0, 0, 0, 0, 0, 2, 1},
                {0, 0, 0, 1, 0, 1, 0, 0, 0, 1},
                {0, 1, 0, 1, 0, 0, 0, 0, 0, 3}};
        System.out.println(solution(arr2));
    }
}

어차피 1분동안은 이동 혹은 회전 둘 중 하나만 가능한 것 같아 if-else로 풀고

따로 boolean flag는 두지 않았는데 이렇게 풀어도 문제 없는거 맞나요 ?

혹시 flag 변수를 두었을 때 얻는 이점이 따로 있는지 궁금합니다.

java 코딩-테스트

답변 1

0

김태원

안녕하세요^^

네. if ~ else ~ 로 해도 상관없습니다. flag로 한게 이득이 있어서가 아니라 각자 코드 스타일이라 보면 좋겠습니다.

비밀번호

0

67

1

과일 가져가기 이러한 경우에는 반례가 생기지 않나요?

0

163

2

cpu 스케줄링

0

107

2

외부 문제 질문

0

122

2

가장 많이 사용된 회의실

0

118

2

심사위원 문제 시간복잡도 질문

0

127

1

현관문 출입순서

0

98

1

미로의 최단거리 통로

0

74

1

집으로 이동 문제 코드

0

125

1

채점 사이트 개설

0

161

2

송아지를 잡자

1

110

1

다익스트라 + 환승횟수

0

135

2

문제풀이 해설 질문입니다.

0

124

2

"이동 횟수" 문제가 변형된다면?

0

156

2

예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ

0

249

1

"비밀번호" 문제 확인 부탁드립니다!

0

171

1

최대 길이 연속수열 질문

0

193

1

잃어버린 강아지 문제 count 관련 질문있습니다

0

204

1

바둑대회 질문입니당

0

222

1

5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다

0

311

1

알파코드 풀이질문입니다

0

218

1

7번 비밀 번호 문제에 시간복잡도가 궁금합니다!

0

164

1

혹시 이렇게 작성해도 괜찮나요?

0

287

2

문제풀이 확인 부탁드립니다.

0

246

1