inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3-P

3-P 자바 기저조건 질문

266

jwnnoh

작성한 질문수 2

0

선생님, 강의 잘 듣고 있습니다! 다름이 아니라 혹시 기저조건에

if (price >= answer) {
            return;
        }

해당 조건을 추가해주지 않으신 이유가 있을까요?

해당 조건 없이도 시간복잡도 관련해서 영향이 적기 때문일까요..?

감사합니다!

 

아래는 저의 답안입니다!

public class Main {
    static int n, answer = Integer.MAX_VALUE;
    static int[][] arr;
    static boolean[][] visited;
    static Map<Point, Integer> map = new HashMap<>();
    static int[] dy = {-1, 0, 1, 0};
    static int[] dx = {0, 1, 0, -1};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        arr = new int[n][n];
        visited = new boolean[n][n];

        for (int i = 0; i < n; i++) {
            String[] s = br.readLine().split(" ");
            for (int j = 0; j < n; j++) {
                int price = Integer.parseInt(s[j]);
                arr[i][j] = price;
                map.put(new Point(i, j), price);
            }
        }

        go(0, 0);
        System.out.println(answer);
    }

    private static void go(int count, int price) {
        if (count == 3) {
            answer = Math.min(price, answer);
return;
        }
        for (int i = 1; i < n - 1; i++) {
            for (int j = 1; j < n - 1; j++) {
                Point point = new Point(i, j);
                if (check(point)) {
                    go(count + 1, price + flower(point));
                    wither(point);
                }
            }
        }
    }

    private static void wither(Point point) {
        visited[point.x][point.y] = false;
        for (int i = 0; i < 4; i++) {
            int ny = point.x + dy[i];
            int nx = point.y + dx[i];

            visited[ny][nx] = false;
        }
    }

    private static int flower(Point point) {
        visited[point.x][point.y] = true;
        int temp = arr[point.x][point.y];

        for (int i = 0; i < 4; i++) {
            int ny = point.x + dy[i];
            int nx = point.y + dx[i];

            visited[ny][nx] = true;
            temp += arr[ny][nx];
        }
        return temp;
    }

    private static boolean check(Point point) {
        for (int i = 0; i < 4; i++) {
            int ny = point.x + dy[i];
            int nx = point.y + dx[i];

            if (ny < 0 || nx < 0 || ny >= n || nx >= n || visited[ny][nx]) {
                return false;
            }
        }
        return true;
    }
}

감사합니다!!

코딩테스트 java c++

답변 1

0

큰돌

안녕하세요 ㅎㅎ

void flower(int cnt,int hap) {
    if (cnt == 3) {
        ret = min(ret, hap);
        return;
    }

혹시 이부분에 해당 부분을 추가해야 한다는 말씀이신가요?

이문제는 일딴 꽃을 3개를 세우고 _> 최저비용을 계산하게 해야해서 해당 부분은 필요하지 않습니다.

3개세우고 -> min값설정 이후 return을 하는 것과

3개 세우고 -> 해당 부분이 더 클 경우 return하는 것은 같은 로직이라고 보시면 됩니다.

 

서로 다른 세 씨앗을 모두 꽃이 피게하면서 가장 싼 가격에 화단을 대여하고 싶다.

| 문제 지문.



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


코딩 살구클럽 가입 문의

0

25

2

코딩살구클럽 가입문의

0

56

2

3-K private case 질문

0

55

2

안녕하세요. 코딩살구클럽 문의드립니다!

0

70

2

7:41 듣다가 질문합니다

0

63

2

코드 리뷰 요청드립니다!

0

63

2

코딩살구클럽 계정 문의

0

68

2

SK하이닉스 대비 강의수강

0

197

3

코딩살구클럽 등록부탁드립니다.

0

66

2

7-F 재귀로 풀시 런타임애러

0

63

1

1-N 문제 질문입니다. (+ 채점오류)

0

71

2

코딩살구클럽 가입 확인 부탁드립니다.

0

81

2

직장인 코테 합격 공부방법 문의

0

110

2

코딩살구클럽 가입 방법

0

89

2

6-H 체점 관련 질문

0

70

1

채점서버 연결 관련 질문입니다

0

99

2

삼성 s직군

0

84

1

삼성 코테 없어짐

0

194

1

코딩살구클럽 가입부탁드립니다

0

85

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

66

2

5-S 테스트 케이스 질문

0

69

2

코살 문제풀이 환경

0

83

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

74

1

추천 추가문제들

0

69

2