수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
BFS 게임 맵 최단거리 문의
안녕하세요 기존에 BFS를 응용해서 타사이트중에 최단거리를 찾는문제에서 위,아래,오른쪽을 체크하는 방법을 몰라서 아래와 같이 막혔습니다. ㅠㅠ 오늘 10시간동안 골머리 앓다가 결국 문의 올립니다 ㅠ 해당 링크와 작성한 소스는 아래와 같습니다. https://programmers.co.kr/learn/courses/30/lessons/1844 import java.util.LinkedList;import java.util.Queue;public class GameMapTest { int m, n = 0; // 가로 세로를 구하기 위해 셋팅 int[][] dirs = {{1,0},{-1,0},{0,1},{0,-1}}; // 오른쪽, 왼쪽, 위, 아래 int size = 0;// 칸의 개수 public int solution(int[][] grid) { int answer = 0; if(grid == null || grid.length == 0) { return answer -1; } m = grid.length; // 행 길이 4 n = grid[0].length; // 열 길이 5 int maxCnt = 0; int [][] visited = new int[m][n]; for(int i=0; i<m;i++) { //행렬보기 for(int j=0;j<n;j++) { System.out.print(grid[i][j]); } } for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(grid[i][j] == 1) { size = 1; bfs(grid, i, j, visited); // 0 만들기 if(maxCnt < size) { maxCnt = size; } } } } answer = maxCnt; return answer; } public int bfs(int[][] grid, int x, int y, int[][] visited) { Queue<int[]> queue = new LinkedList<>(); queue.offer(new int[] {x, y}); // 0, 0 으로 초기화해 버리기 // 오, 왼, 위 ,아래 while(!queue.isEmpty()) { int[] point = queue.poll(); // 사방으로 조회 for(int[] dir : dirs) { int x1 = point[0] + dir[0]; int y1 = point[1] + dir[1]; // 1. 마이너스 좌표 체크 x1 >= 0 && y1 >= 0 // 2. m*n 범위 체크 m > x1 && n > y1 // 3. grid[x1][y1] == 1 if(x1 >= 0 && y1 >= 0 && m > x1 && n > y1 && grid[x1][y1] == 1) { if (!queue.isEmpty()) size++; grid[x1][y1] = 0; queue.offer(new int[]{x1, y1}); } } } return size; }
- 미해결코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
코딩테스트 처음 입문 했는데 질문이 있습니다.
스프링 공부만 하다가 코딩테스트 처음 접하게된 초보입니다. 풀다가 궁금한 점이 생겼는데 알려주신 유형의 문제를 이런식으로는 풀면 안되는 건가요? public String solve(String num1, String num2) { /* int intNum1 = Integer.parseInt(num1); int intNum2 = Integer.parseInt(num2); return Integer.toString(intNum1 + intNum2);*/} 보통 알고리즘 문제는 charAt로 푸는건지.. 아니면 성능 문제라던지 어떤 이유때문에 charAt으로 푸신건지 알고 싶습니다!
- 해결됨코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
안녕하세요. 수강생입니다. 이 강의만 전부 소스 보낼 수 있을까요?
안녕하세요. 수강생입니다. 이 강의만 전부 소스 보낼 수 있을까요?
- 미해결코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
추가 강의 문의.
안녕하세요~ 알고리즘 여러 스터디에 참여 하면서 이런 문제들도 필수로 나오는거 같아 문의드립니다. 1. 순열 2. 조합 이 세가지에 대해 혹시 강의 계획도 있으신지 문의드립니다. 감사합니다.
- 미해결코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
개념 설명이 잘못나온거 같습니다.
queue & stack 파트인데 개념 설명은 Array가 나옵니다.!!
- 미해결코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
BFS 문제 질문
안녕하세요. BFS 강의를 보고 응용하여 타사이트 문제도 도전해서 풀어보면서 적용이 되는것에 재미를 느끼고 있습니다. 하지만, 약간의 응용문제를 풀려고 하니 쉽지않네요. ㅠㅠ 프로그래머스 문제 (카카오 컬러링북) 아래 링크 걸어두었습니다. https://programmers.co.kr/learn/courses/30/lessons/1829 -> 카카오컬러링북 BFS 문제인데 강사님께서 강조하시던 1. 마이너스 좌표체크 2. m*n 범위체크 3. grid[x][y] 값체크(문제제시값) 을 하면 해당범위에 잘걸리지않아 카운트가 잘 되지 않고 있습니다. ㅠㅠ 코드는 적어서 올려볼게요. 피드백 주시면 감사하겠습니다 ㅠㅠ * 추가적으로 0과 1이 아닌 아래 문제처럼 1, 2, 3 색깔별로 찾는 문제도 있으면 응용에 도움이 많이 될것같습니다. package com.algoStudy.algo0128;import java.util.Arrays;import java.util.LinkedList;import java.util.Queue;public class BFSTest_04 { // 카카오문제 public static void main(String[] args) { int m = 6, n= 4; int[][] grid = { {'1', '1', '1', '0'}, {'1', '2', '2', '0'}, {'1', '0', '0', '1'}, {'0', '0', '0', '1'}, {'0', '0', '0', '3'}, {'0', '0', '0', '3'} }; System.out.println(new BFSTest_04().solution(m, n, grid)); } // 전역변수 선언// int m,n = 0; // 가로 세로 구하기위해 셋팅 0,0 부터 시작이면 이미 선언되어있음 6x4 int[][] dirs = {{1,0}, {-1,0}, {0,1}, {0,-1}}; // 아래,위,오른,왼 int size = 0; public int[] solution(int m, int n, int[][] picture) { int numberOfArea = 0; int maxSizeOfOneArea = 0; // grid에 필요한 그림 그리기 및 영역 표시 확인 후 카운트 새기 for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(picture[i][j] != '0') { // 값이 해당값에 포함되어있다면, 즉 영역이라면 증가시키고 bfs 칠해주기 size = 0; numberOfArea++; // 육지 갯수 카운트 bfs(picture, m, n); // 남은영역 0 칠해주기 if(maxSizeOfOneArea < size) maxSizeOfOneArea = size; } } } int[] answer = new int[2]; answer[0] = numberOfArea; answer[1] = maxSizeOfOneArea; System.out.println(Arrays.toString(answer)); return answer; } private void bfs(int[][] grid, int x, int y) { // bfs는 큐방식을 선언해주는게 이상적 Queue<int[]> que = new LinkedList<>(); que.offer(new int[] {x,y}); while(!que.isEmpty()) { // 값이 있으면 int[] point = que.poll(); // 즉시 빼기기 // 방향 찾아서 0으로 칠하기 for (int[] dir : dirs) { int x1 = point[0] + dir[0]; int y1 = point[1] + dir[1]; // 1. 마이너스 좌표체크 2. m*n 범위체크 3. grid[x][y] 값체크(문제제시값) if (x1 >= 0 && y1 >= 0 && x > x1 && y > y1 && grid[x1][y1] != '0') { grid[x1][y1] = '0'; que.offer(new int[] {x1, y1}); size++; } } } }}
- 미해결코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
BFS목록에 Array강좌가 잘못 들어갔어요.
확인 부탁드립니다.
- 해결됨코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
질문있습니다.
강의에서 start= left+1, end = right-left-1 을 해주고 결과값 리턴시 s.substring(start, start+end)을 해주고있습니다. 궁금한것이 start+end를 하는것이 결국 left+1 + right-left-1 인걸로 생각되서 저는 end에 right만 해주고 결과값에 s.substring(start, end)를 하여 테스트를 해봤는데 동일하게나옵니다. 여러가지 테스트를 했는데 똑같이 나와서 맞구나 생각되는데 프로그래머스의 가장긴팰린드롬이라는 문제를 적용해서 해보았는데... 알려주신 방법으로는 통과가 되는데 제가 수정한 방법은 특정 문제에 실패가 나옵니다.. 아무리 제가 테스트 케이스를 작성해서 넣어봐도 똑같은거 같은데.. 제가 수정한 방식의 접근 방법이 어디가 잘못된건지 여쭤봅니다. 감사합니다. ```java public class inflearn_string_04 { public static void main(String[] args) { String[] ss = new String[] {"a","qwertytrss","tt","fff","asdfds","abcde","abcabcdcbae"}; for(String s: ss) { solve(s); } } private static int start, end, end2; public static void findSubString(String s, int left, int right) { while(left >= 0 && right <= s.length()-1 && s.charAt(left) == s.charAt(right)) { //System.out.println(left+","+right+","+s.substring(left,right+1)); left --; right ++; } if(end2 < right-left-1) { end2 = right; } if(end < right-left-1) { start = left+1; end = right-left-1; } } public static String solve(String s) { start = 0; end = 0; end2 = 0; boolean chk = false; int len = s.length(); if(len < 2) return s; for(int i=0; i< len-1; i++) { findSubString(s,i,i); findSubString(s,i,i+1); } if((s.substring(start,start+end).equals(s.substring(start,end2)))) { chk = true; } System.out.println( chk+"||"+s.substring(start,start+end)+"=="+s.substring(start,end2)); return s.substring(start,start+end); // return s.substring(start,end); } } ```
- 해결됨코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)
영상 멈춤현상
영상이 13:08초에서 13:44초까지 멈춥니다.