import java.util.Scanner; public class Main { int[] dx = {-1, 0, 1, 0}; int[] dy = {0, 1, 0, -1}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[][] arr = new int[num][num]; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { arr[i][j] = sc.nextInt(); } } Main T = new Main(); System.out.print(T.solution(num, arr)); } public int solution(int num, int[][] arr) { int answer = 0; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { boolean flag = true; for (int k = 0; k < 4; k++) { int nx = i + dx[k]; int ny = j + dy[k]; if (nx >= 0 && nx < num && ny >= 0 && ny < num && arr[nx][ny] > arr[i][j]) { flag = false; break; } } if (flag) { answer++; } } } return answer; } } 정답을 요청한 코드입니다. 처음테스트와 두번째 테스트 케이스는 통과하나 그 이후 테스트 케이스는 실패한다고 나오네요.. 코드는 강사님이 작성해주신 코드와 동일하게 작성했는데.. 원인을 모르겠어서 질문 남깁니다
고차함수 강의에서 Unit이 짧게 나왔는데 Unit은 아무것도 리턴하지 않는다 라는 의미라고 설명해주셨는데 무슨 뜻인지 와닿지가 않습니다ㅠㅠ 개발자 스타일에 따라서 Unit을 사용할 수도 있으니까 당황하지 말라고 알려주신다고 하셨는데 간단한 예시인 fun test1() : Unit { println("abc") } 에서는 fun test1() { println("abc") } 처럼 Unit을 생략해도 오류가 나지 않는데 fun highPrintTest(operation : (String) -> Unit) { operation("bbb") 여기서는 fun highPrintTest(operation : (String)) { operation("bbb") 이렇게 Unit을 생략하면 오류가 나는 것 같은데 여기선 Unit이 꼭 필요한 생략할 수가 없는 상황인가요?
function solution(need, plan) { let answer = 'YES'; let queue = []; for (let x of plan) { if (need.includes(x)) queue.push(x); } if (need !== queue.join('')) return 'NO'; return answer; } let a = 'CBA'; let b = 'CBDAGE'; console.log(solution(a, b)); 큐로 접근해서 문제풀이하고 싶었으나 비효율적(?)으로 풀어버렸습니다 😂 혹시 이렇게 풀이해도 괜찮은걸까요 ? 리뷰 부탁드립니다 !
이미 동일한 질문에 대해서 검색을 해보고 답변을 봤음에도 이해가 되지 않아 질문드립니다! 큰돌님께서는 (y,x)를 사용하신다고 하셨는데 저희가 원래 지금까지 수학 교과과정을 배울 때는 대부분 (x,y)라고 해서 이게 더 익숙할 것 같은데 (y,x)가 익숙하신 이유가 궁금합니다..! 크게 중요하지 않다는 것은 아는데 알파벳상으로도 x가 먼저 오기도 하고 해서 y,x라고 써야 하는 이유가 있는 건지 아니면 큰돌님께서 어느순간부터 그렇게 작성하는 것이 익숙해지셔서 그런건지 알고 싶습니다. 감사합니다.
K번째 큰 수가 그거였군요.. 처음에 키워드가 딱 조합,순열 문제길래 초반인데 뭐지 했습니다. 근데 입력제한이 N이 100이하더군요 그래서 바로 삼중포문 돌려서 풀었는데 , case#1만 success 뜨고 나머진 다 wrong answer 떠서 뭘 잘못했나? 하고, 결국 조합까지 구현해서 풀었는데도 오류 뜨길래 1시간넘게 고민하다가 문제 다시 보고 해결했습니다... 문제 마지막줄 22 안읽고 그냥 풀다가..., 추가로 이제껏 문제들 다 자바스크립트로 푸는게 익숙해서 파이썬으로 알고리즘 문제 푸는게 안 익숙하네요.. 특히 자바스크립트에서 항상 쓰던, 전개연산자랑 특히, 고차함수랑 구조분해..(map,filter,sort,reduce,forEach, flatmap 같은 것들 많이 썻는데) 파이썬에서의 위와 같은 기능으로서 존재하는것들을 사용해서, 구현하고자 싶어하는걸 구현하는게 진짜 적응이 안됩니다 그런데 파이썬도 자바스크립트처럼, 혹시 순열,조합, 트라이 구조나 힙 등.. 구현하기 귀찮은것들.. 구조 이용해서 풀려면 다 구현해놓고 써야하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 2-S 효율적인 해킹 문제를 풀던 중 도저히 알수없는 문제를 만나 질문글을 올립니다. 다름아니라 최대값과 해킹할 수 있는 컴퓨터의 값이 중간에 변하는 문제를 만났습니다. 보시는 바와 같이 DFS 결과값을 넣어주는 반복문 안에서 출력을 하면 출력값이 제대로 나오는데 보시는 바와 같이 DFS 결과값을 넣어주는 반복문 밖에서 출력을 하면 DFS 결과값들을 넣어준 배열값들이 변하면서 원하는 출력값이 나오지 않습니다.. 어딜 실수한건지, 어딜 잘못적은건지 도저히 모르겠습니다....ㅠㅠ 도와주세요...ㅠㅠㅠㅠ
안녕하세요, 강사님 좋은 강의 덕분에 코테 준비를 잘 해가고 있습니다. 다름이 아니라, 그래프 유형 문제를 풀 때, 즉 bfs나 dfs 관련 문제를 백준 사이트에서 찾아 풀 때, void bfs(int y, int x).... 이렇게 풀고 있는데, 오래 걸려도 풀지 못 할 때, 다른 사람의 답안을 볼 떄는 void bfs(int x, int y)로 잡아서 풀더라구요. 다른 사람의 답안을 강사님이 풀어주시는 방식으로 바꿔 풀 때는, 그냥 x->y, y->x로만 바꿔서 풀면 될지, 매개변수 들을 다 바꿔야 될지 굉장히 헷갈려서 질문 드립니다 ㅠㅠ
import java.nio.channels.Pipe; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; class Point implements Comparable<Point>{ public int x, y; Point(int x, int y){ this.x = x; this.y = y; } @Override public int compareTo(Point o){ if(this.x == o.x) return this.y-o.y; else return this.x-o.x; } } class Main{ public static void main(String[] args){ Scanner kb = new Scanner(System.in); int n = kb.nextInt(); ArrayList<Point> arr = new ArrayList<>(); for(int i = 0; i < n; i++){ int x= kb.nextInt(); int y= kb.nextInt(); System.out.println(x+","+y); arr.add(new Point(x, y)); } Collections.sort(arr); System.out.println(">>"); for (Point o: arr) System.out.println(o.x+" "+o.y); } } arr.add(new Point(x, y)); 이 부분을 출력해서 값을 프린트하고 싶은데 어떻게 코드를 짜야하나요?? public static void main(String[] args){ Scanner kb = new Scanner(System.in); int n = kb.nextInt(); ArrayList<Point> arr = new ArrayList<>(); for(int i = 0; i < n; i++){ int res; int x= kb.nextInt(); int y= kb.nextInt(); System.out.println(x+","+y); arr.add(new Point(x, y)); res = arr.add(new Point(x, y)); System.out.println(res); } 이렇게 res 변수를 만들어서 작석했는데 에러가 나네요 ㅠ 도와주세요ㅠㅠㅠ
강의를 수강하고 있는 학생입니다. 다만 최악의 경우를 따지는 데에서 조합의 수 x n(학생의수) 의 최악의 경우 15C7 x 30000인데 이경우 6435x30000=193,050,000가 도출됩니다. 이러면 계산이 2억번 가까이 되어서 1000ms에 풀수 있는지 여쭤 볼 수 있을 까요?
<script> function solution(c, arr){ let answer=Number.MIN_SAFE_INTEGER; let n=arr.length; function DFS(L, sum){ if(sum>c) return; if(L===n){ answer=Math.max(answer, sum); } else{ DFS(L+1, sum+arr[L]); DFS(L+1, sum); } } DFS(0, 0); return answer; } let arr=[81, 58, 42, 33, 61]; console.log(solution(259, arr)); </script> 아직 재귀에 대한 이해가 짧아 잘 모르겠습니다. 답은 242인데, 만약 sum의 값이 181이었고 다음에 나온 sum의 값이 275라고 한다면 sum>259일때 return으로 함수가 종료되고 최대값인 242를 찾지 못하고 181로 종료가 될수도 있는것 아닌가요?? 아니면 제가 이해를 잘못한건지요??
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. 라고 해서 m, n 을 입력 받았는데 왜 틀린지 모르겠습니다. 강사님 풀이에서 n, m이라고 받으신 이유도 모르겠습니다.... 아래 코드에서 제대로 array 받아오는 것 같은데 이유를 틀리는 이유를 모르겠습니다...! 강사님이 제공해주신 테스트 케이스는 다 통과하지만 백준에서는 틀리는 이유를 모르겠습니다... 6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 # 받아온 array [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1] 8 import sys sys.setrecursionlimit(10 ** 6) # sys.stdin=open("in5.txt", "r") def valid_coord(x, y): if 0 <= x < m and 0 <= y < n: return True else: return False def print_array(array): for elem in array: print(elem) def bfs(): while queue: # tmp_len = len(queue) # for _ in range(tmp_len): temp = queue.popleft() temp_dis = dis[temp[0]][temp[1]] for dx, dy in zip(dxs, dys): nx = temp[0] + dx ny = temp[1] + dy # 익지 않은 상태이거나 유효한 좌표일 때 if valid_coord(nx, ny) and arr[nx][ny] == 0: queue.append((nx, ny)) arr[nx][ny] = 1 dis[nx][ny] = temp_dis + 1 if __name__ == '__main__': from collections import deque n, m = map(int, input().split()) arr = [] for _ in range(m): arr.append(list(map(int, input().split()))) dis = [] for _ in range(m): dis.append([0] * n) dxs = (-1, 1, 0, 0) dys = (0, 0, -1, 1) # print_array(arr) # print('----') # print_array(dis) queue = deque() for i in range(m): for j in range(n): if arr[i][j] == 1: queue.append((i, j)) bfs() # print_array(dis) # arr에서 0을 발견하면 flag = False로 설정 flag = True for i in range(m): for j in range(n): if arr[i][j] == 0: flag = False result = 0 if not flag: print(-1) else: result = max(max(dis)) print(result)
안녕하세요 선생님 열심히 알고리즘 강의 수강하고 있는 학생입니다. 다름이 아니라 질문드릴게 있어서 글 쓰게 되었습니다. 섹션 2의 2번째 문제에서 for i in range(T): n,s,e,k = map(int,input().split()) a=list(map(int,input().split())) a=a[s-1:e] a.sort() print("#%d %d" %((i+1),a[k-1])) 코드를 이렇게 짰습니다. 이렇게 짜면 맞지만, 저 코드중 굵게 표시한 곳을 붙여서 a=a[s-1:e].sort() 라고 붙여쓰면 오류가 납니다. 구글링을 해봐도 알 수 없기에 질문 드렸습니다. 감사합니다.