inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

9. 조합 구하기(채점지원안됨)

백준 17141 추가문제 입니다. 8-15번 피자문제

455

니냐롱

작성한 질문수 3

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

 

안녕하세요 교수님

교수님께서 알려주신 8-15번 풀이를 적용하여

추가문제 백준 17141 연구소 2를 풀고 있습니다

그런데 어떻게 풀어도 계속 메모리 초과가 나서 뭐가 문젠지 모르겠습니다...

import java.util.*;

class Pointo{

int y; int x;

Pointo(int y, int x){

this.y=y;

this.x=x;

}

}

public class Main {

static int n;

static int m;

static int[][] arr;

static int[] pm;

static int[] dx= {0,0,+1,-1};

static int[] dy= {+1,-1,0,0};

static ArrayList<Pointo> list=new ArrayList<>();

static int answer=Integer.MIN_VALUE;

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

n=scanner.nextInt();

m=scanner.nextInt();

arr=new int[n][n];

pm=new int[m];

for(int i=0; i<n; i++) {

for(int j=0; j<n; j++) {

arr[i][j]=scanner.nextInt();

if(arr[i][j]==2) {

list.add(new Pointo(i,j));

}

}

}

dfs(0,0);

if(answer!=0)System.out.println(answer);

else System.out.println("-1");

}

public static void dfs(int val, int next) {

if(val==m) {

bfs(0);

return;

}

else {

for(int i=next; i<list.size(); i++) { //list에서 m개뽑자

pm[val]=i;

dfs(val+1,i+1);

}

}

}

public static void bfs(int val) {

int[][] copyarr=new int[n][n];

int[][] dis=new int[n][n];

Queue<Pointo> q=new LinkedList<>();

for(int i=0; i<pm.length; i++) {

int l=pm[i];

int qx=list.get(l).x;

int qy=list.get(l).y;

q.add(new Pointo(qy,qx));

copyarr[qy][qx]=2;

}

//copyarr 벽 만들기

for(int i=0; i<n; i++) {

for(int j=0; j<n; j++) {

if(arr[i][j]==1) {

copyarr[i][j]=1;

}

}

}

while(!q.isEmpty()) {

Pointo p=q.poll();

for(int i=0; i<4; i++) {

int nx=p.x+dx[i];

int ny=p.y+dy[i];

if(nx>=0 && ny>=0 && nx<n && ny<n) {

if(copyarr[ny][nx]!=1) {

copyarr[ny][nx]=2;

dis[ny][nx]=dis[p.y][p.x]+1;

q.add(new Pointo(ny,nx));

}

}

}

}

count(copyarr,dis);

}

public static void count(int[][] arr, int[][] dis) {

int maxy=0;

for(int i=0; i<n; i++) {

for(int j=0; j<n; j++) {

if(dis[i][j]>maxy)

maxy=dis[i][j];

}

}

answer=Math.max(maxy,answer);

}

}

 

java 코딩-테스트

답변 1

0

김태원

안녕하세요^^

메모리초과가 나는 이유는 위에 코드가 무한루프를 돌기 때문입니다.

채점하기전에 문제에 있는 테스트케이스(입력예시)를 넣고 답이 나오는지 확인해보세요.

위에 코드 중 bfs메서드에서 무한루프에 빠지고 있습니다.

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

34

2

갑자기 채점 사이트가 바뀌었어요

0

35

1

문제 리스트 페이지

0

30

1

채점 사이트 관련 질문드립니다

0

24

1

봉우리 문제 질문입니다

0

84

2

씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?

0

65

0

이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?

0

72

0

가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법

0

67

1

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

0

85

2

6-7 강의에서

0

48

1

6-6. 장난꾸러기 질문 있습니다.

0

46

1

강의 수강후 코딩테스트

0

111

1

answer 변수 사용 여부

0

46

1

2중 for문

1

85

2

2-11. 임시반장정하기 (Runtime Error)

0

63

1

혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?

0

70

1

이런 풀이는 어떨까요

0

44

1

자바 스트림 방식의 효율성 질문 드립니다.

0

57

1

알고리즘 자료 구조들..

0

63

1

StringBuilder vs BufferdWriter

0

48

1

원더랜드(프림)

0

50

1

이런 코드는 어떤가요?

0

61

1

bfs 풀이

0

57

1

병합정렬

0

57

1