묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
수업노트 관련 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.이번 수업노트의 아래부분에서 궁금한점이 있어서 질문드립니다.코드가 수정되었습니다.void go(int here){ if(here == n){라고 언급해주셨는데, 이 부분이만약 n이 3인 상황에 here == n 코드 기준으로위 사진 처럼go(1) -> go(2) -> go(3) 까지 호출되어서 go(3) 총 4번 호출되게 되는데요, 이러면 1번째 행과 2번째 행에대한 반전/비반전 경우의 수가 2*2 = 4만이 고려되었다고 생각합니다. 따라서 기존 코드인 here == n +1 을 기준으로 본다면go(1) -> go(2) -> go(3) -> go(4) 까지 호출되어서 go(4)가 총8번 호출되게 되는데요, 이래야 1,2,3(n = 3)행의 비반전/반전의 경우의 수인 2*2*2=8가지의 경우의 수가 고려된것이 아닌지 궁금합니다..
-
해결됨김영한의 실전 자바 - 중급 2편
Comparator질문입니다
public class SortMain2 { public static void main(String[] args) { Integer[] arr = {3,2,1}; System.out.println(Arrays.toString(arr)); System.out.println("Comparator 비교"); Arrays.sort(arr,new AscComparator()); System.out.println("AscComparator:"+Arrays.toString(arr)); } } public class AscComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { if(o1 > o2){ return 1; } else if (o1 == o2) { return 0; }else return -1; } }SortMain2함수에서 Arrays.sort(arr,new AscComparator()); 부분에서 new AscComapator()로 객체만 생성했는데 어떻게 compare함수까지 호출되서 비교를 할수있는거죠?이해가안갑니다...함수 호출을안해는데..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
연속해서 자음, 모음을 구하는거에서 저는 단순하게 풀었는데
http://boj.kr/2a16a22c3a174c32bb1a46a3157072b5 제 코드입니다. 저는 너무 주먹구구식으로 생각하는 것 같은데.알고리즘으로 푸는 문제가 아닌 상황을 해결해야 하는 문제를 직면하게 되면 제 코드를 보시다시피 너무 주먹구구식으로 생각하는 경향이 있는 것 같습니다.선생님처럼 우아한 코드를 쓰고 싶은데 어떻게 생각을 늘려야 할까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요.- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. if (y == 0 || x == 0 || y == r - 1 || x == c - 1) {ret = person_check[y][x];break;}여기서 그냥 ret에 저장하고 break를 하셨는데.. 저는 min으로 계속 비교 해야한다고 생각했거든요.. dfs처럼 재귀함수가 아니고 q에 들어온 순서대로 저장이 되고.. 가장 먼저 가장자리에 들어가게 되서 그냥 break로 끝내는 걸까요..? 저는 계속 생각해도 다른 가장자리에 더 최소로 갈 수 있을 것 같은데..ㅜ if (y == 0 || x == 0 || y == r - 1 || x == c - 1) {그리고 저는 이 if 문이 for (int i = 0; i < 4; i++) {int ny = y + dy[i];int nx = x + dx[i]; for문 안에 있어야 된다고 생각했는데.. for문에서 불보다 가까운지, 넘어가지는 않는지 이런걸 pass해야 해서 그런걸까요? 코드를 아래처럼 했는데 똑같은 것 같은데 틀렸다고 나옵니다..ㅜ#include <bits/stdc++.h>using namespace std;const int INF = 987654321;char a[1004][1004];int r, c, sx, sy, ret, y, x;int dy[] = { -1, 0, 1, 0 };int dx[] = { 0, 1, 0, -1 };int fire_check[1004][1004], person_check[1004][1004];int main() { cin >> r >> c; queue<pair<int, int>> q; fill(&fire_check[0][0], &fire_check[0][0] + 1004 * 1004, INF); //memset(fire_check, INF, sizeof(fire_check)); for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { cin >> a[i][j]; if (a[i][j] == 'F') { fire_check[i][j] = 1; q.push({ i,j }); } if (a[i][j] == 'J') { sy = i; sx = j; } } } while (q.size()) { tie(y, x) = q.front(); q.pop(); for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny < 0 || ny >= r || nx < 0 || nx >= c) continue; if (fire_check[ny][nx] != INF || a[ny][nx] == '#') continue; fire_check[ny][nx] = fire_check[y][x] + 1; q.push({ ny, nx }); } } person_check[sy][sx] = 1; q.push({ sy, sx }); while (q.size()) { int y = q.front().first; int x = q.front().second; //tie(y, x) = q.front(); q.pop(); if (y == 0 || x == 0 || y == r - 1 || x == c - 1) { ret = person_check[y][x]; break; } for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny < 0 || ny >= r || nx < 0 || nx >= c) continue; if (person_check[ny][nx] || a[ny][nx] == '#') continue; if (fire_check[ny][nx] <= person_check[ny][nx] + 1) continue; person_check[ny][nx] = person_check[y][x] + 1; q.push({ ny, nx }); } } if (ret != 0) cout << ret; else cout << "IMPOSSIBLE \n";}
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-A 질문있습니다.
제 방식대로 풀었을 떄 왜 틀렸는지 잘 모르겠어서 질문 남겨요#include <bits/stdc++.h> using namespace std; int arr[9]; vector<int> v; // 9명중 7명 선택 // 키의 합 100 // 키가 주어 졌을 때 일곱 난장이 찾기 // 키를 오름차순으로 출력하기 bool Check() { int sum = 0; for (int a : v) sum += a; if (sum == 100) return true; return false; } void Print() { vector<int> ret = v; sort(ret.begin(), ret.end()); for (int a : ret) cout << a << '\n'; } void Combi(int start) { if (v.size() == 7) { if (Check()) Print(); return; } for (int i = start + 1; i < 9; i++) { v.push_back(arr[i]); Combi(i); v.pop_back(); } } int main() { // input for (int i = 0; i < 9; i++) cin >> arr[i]; // 9명중 7명 선택 Combi(-1); return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-A: 맞왜틀 질문
안녕하세요 선생님.#2178 문제 중, 질문이 있습니다.사실 ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 를 습관처럼 사용했습니다.코드 실행 성능을 늘릴 수 있다는 생각 하에 아무생각없이 넣었었는데요.#2178 문제의 경우 이 코드 라인 존재 유무에 따라 정답 오답 차이가 발생하게 되었습니다.정답코드: http://boj.kr/a38836f77c014af59c41c4d52b8416bc오답코드: http://boj.kr/b698e25e27b84232901cd3ee8f0dc037정답/오답의 판별이 아래 코드의 존재 유무에 기인한 것인지, 아니면 다른 부분에 있는 것인지 질문 드립니다.int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ... }
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
제 학습방법이 맞는지 궁금합니다..
만약 강의보기전에 알고리즘 문제 풀 때, 아무것도 쓰지 못할 경우에는일단 어떻게 접근할지 생각해본다 (한 자라도 쓸 수 없더라도) 강의를 본다. 모르는 개념이 나왔을때, 따로 공부하고 코드를 계속 외울때까지 써본다.이런 방식으로 해도 괜찮을까요??
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Section 10. 동전교환 반례
32 3 51 테스트케이스를 위와 같이 입력할 경우 정답 코드대로 하면 Intger.MAX_VALUE인 2147483647이 답으로 나올 것 같아서요. 이렇게 추가코드를 넣어야 하는것 아닌지 궁금합니다. import java.util.*; class Main{ static int n, m; static int[] dy; public int solution(int[] coin){ Arrays.fill(dy, Integer.MAX_VALUE); dy[0]=0; for(int i=0; i<n; i++){ for(int j=coin[i]; j<=m; j++){ dy[j]=Math.min(dy[j], dy[j-coin[i]]+1); } } /* 추가코드 for (int i = 0; i <= m; i++) { if (dy[i] == Integer.MAX_VALUE) { dy[i] = 0; } } */ return dy[m]; } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); n=kb.nextInt(); int[] arr=new int[n]; for(int i=0; i<n; i++){ arr[i]=kb.nextInt(); } m=kb.nextInt(); dy=new int[m+1]; System.out.print(T.solution(arr)); } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-P 질문
안녕하세요 큰돌님.항상 강의 잘듣고 있습니다! http://boj.kr/9b11458d7099479e944bd68a0403eb44문제를 풀고 영상을 확인하였는데 큰돌님이랑 풀이 방식이 조금은 다르지만 전반적인 흐름은 비슷하다고 생각이 되는데 왜 제대로 동작하지 않는지 도저히 해결이 안돼서 질문 드립니다.. ㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-A 질문있습니다 :)
안녕하세요 선생님 🙂 전체적인 로직은 이해가 가지만 이해가 되지 않는 부분이 있어서 질문 드립니다. 강의에서도 설명해주셨지만 if (pq.size() > vec[i].first) 이 부분이 부분적으로 이해가 되지 않습니다. 선생님의 로직과 문제의 예제를 보면 1일 강의가 2개가 있고 2일 강의가 2개가 있기 때문에 1일 강의와 2일 강의에서 가장 큰 페이를 가진 강의를 1개씩 선택할 수 있으며, 3일 강의는 1개이기 때문에 3일까지 문제없이 풀이가 되는 것까지는 이해를 했습니다. 예제에서 존재하는 날짜는 1, 2, 3, 10, 20인데요, 3일에서 10일로 한번에 7일을 건너뛰었습니다.pq.size()= 3인 상태에서 vec[i].first = 10이 될 것으로 예상되는데요, 만약에 10일 강의가 2개있다면 pq.size() = 4이기 때문에 pq.pop()연산이 발생하지 않을 것이기에 문제풀이에 지장이 생길 것이라고 생각하고 있습니다. 테스트케이스를 만들어서 입력해봤을 때는 문제가 없었지만.. 왜 문제없이 풀이가 되는지 알려주시면 감사하겠습니다 :)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 질문있습니다.
http://boj.kr/b1fa6325d50644dcad7a2f7adf22d925틀린 코드이긴 하지만 왜 메모리 초과가 나는지 모르겠습니다.저는 2차원배열을 쓰지 않아서 제일 큰 배열이 visited[MAX]가 500000의 크기를 갖는데 이것만으로도 메모리 초과가 나나요..?그리고 여기서 좀만 수정하면 문제가 풀릴 것 같은데 어떻게 하면 좋을지 한 번 여쭤봐도 될까요? 이렇게는 풀수 없을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
노션 링크 신청했습니다!
금일 오전에 노션 링크 신청했습니다!확인 부탁드려요!
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
재귀와 완전탐색의 차이에 관한 질문이 있습니다!
문제를 풀때, 재귀함수를 사용하여 백트래킹 하는 방법이 있고 완전 탐색 for 문을 돌리는 방법 두가지가 있다고 했을때, 어느것을 사용하든지 관계 없나요? 본질적으로 모든 경우의 수 탐색하는 건 똑같은데 그 방법의 차이일 뿐인가요?? 만약 그렇다면 for 문으로 일일이 코딩하기 어려운 문제들을 재귀로 푼다고 생각하면 될까요?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
BOJ 10870 문제 질문드립니다.
섹션 2의 재귀함수 이해하기 파트에서 풀이 1에서n을 입력하는 것과 0,1의 값을 정해주는 것 그리고 for문의 형식까지는 이해했습니다.하지만 arr = [-1] * (n + 2)가 주석을 봐도 어떤 것을 의미하는지 잘 모르겠습니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-D 오타 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의에서 ret.push_back(dfs(i,j)); 의 조건문에서 if(a[i][j]!=1 & visited[i][j]==0)로 되어있는데 if(a[i][j]!=1 && visited[i][j]==0) 의 오타인걸까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-c 코드확인부탁드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.어디 부분이 틀렸는지 궁금해서 문의드립니다! ㅜㅜ http://boj.kr/4f5b5da439db44be965575740b0ac5ea
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
공부 방법에 대한 조언을 구하고 싶습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님!3주차 진행 중인 학생입니다.2주차까지는 개념 듣고 교안 공부 -> 2주차 문제 풀이 -> 문제 강의 듣기 순으로 공부를 해왔고 같은 방식으로 3주차도 진행하고 있었는데, 2주차보다는 난이도가 올라가서 그런지 몇몇 문제의 접근 방식과 풀이를 고민하는 시간이 2시간을 넘어가게 됐습니다... 그래서 선생님의 해설을 참고하기 시작했는데요. 커뮤니티를 찾아보니 이렇게 해설을 참고했거나 틀린 문제의 경우 1일, 3일, 7일 간격을 두고 다시 풀어보라는 답변을 해주셨더라고요. 그래서 저도 1,3,7일 간격으로 다시 풀어볼 예정인데, 이렇게 하게 된다면 시간 내 주차별 문제를 전부 풀기가 어렵지 않을까요? 예를 들어 3주차라면, 3주차의 17문제를 이번 주 내로 풀지 못할 것 같은데 시간을 더 늘려서라도 다음 주까지 3주차를 다 체득하고 다다음주부터 4주차 진도를 나가는 게 좋을까요? 아니면 3주차의 문제를 다 풀지 못했더라도 최대한 주차에 맞춰 4주차 진도를 나가며 3주차 오답(반복풀이)을 병행하는 게 좋을까요...! 시간이 넉넉했더라면 8주 이상 걸리더라도 차근차근 학습 후 넘어가겠지만, 이번 하반기 취업이 목표라 10월 초까지 완강을 목표로 하고 있어서 어떻게 학습하는 게 좋을지 모르겠습니다. 개인적인 생각으로는 코테에 어떤 유형의 문제가 나올지 모르니, 일단 진도에 맞춰 다양한 유형을 학습하는 게 조금 더 좋지 않을까? 싶은데 선생님의 조언을 구하고 싶습니다!! +) 추가로 현재 3주차 문제(골드5~3)를 푸는데 약 2시간 정도 사용하고 있습니다. 너무 고민하는 시간이 긴 건 아닐까 싶어요... 문제마다 달랐긴 한데 로직 자체를 생각하는데만 2시간인 적도 있고, 코드 작성하고 반례 생각하는데 2시간인 적도 있습니다. 코드 짜는 시간을 제외하고 문제에 대한 로직을 '고민'하는 시간만으로는 어느정도가 적당할까요? 제 스스로가 생각해도 한 문제를 붙잡는 시간이 너무 긴 것 같아서... 이 부분도 조언 주시면 정말 감사하겠습니다!
-
해결됨[입문편] 안드로이드를 위한 코틀린(Kotlin) 문법
키보드관련 문제
안녕하세요. 플레이그라운드나 안드로이드 스튜디오에서 코틀린을 사용 문제인데요, 어느날은 방향키가 잘 먹히는데 어느 날은 방향키가 안먹히는 날이 있더라구요. 방향키 뿐만 아니라 문제가 생긴 날에는 엔터키 오른쪽에 있는 부분이 안먹히는 문제가 발생하는데 왜 그런건가요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
13:04 방귀 문제 질문입니다.
13:04 질문이 있습니다.방구를 뀌었을 시 상하좌우로 퍼져나간다고 문제가 전제되었을 때1. 크레이지 아케이드의 물폭탄처럼 해당 지점의 상하좌우로 퍼져나가는지2. 그게 아니라면 오염받은 지점 역시 다음번에 그 지점으로 부터 오염이 이어나가져 주는지는 어떻게 구분하시나요?조금 더 직관적으로 질문을 드리자면 Connected Component로 할 경우 각 4개로 구분이 되므로1번 상황의 경우 1번째 육지에서 2행1열에 서 뀌면 한번에 오염이 되겠지만2번 상황의 경우엔 아무데나 뀌어도 전체가 오염이 될 것입니다.혹시 이런 판단을 어떻게 내리시는지 여쭤봐도 될까요?코딩테스트에서 문제에 대해서 직관적으로 이해가 항상 제일 어려운 문제인 것 같습니다. ㅜㅜ 너무 문맥 파악이 어렵네요.ps. 추가된 질문인데 한번 방귀를 뀔 때 4방향만 오염된다고 했을 때 혹시 만약 저 상황에서 최소한의 방귀로 오염시킬 수 있는 횟수를 구하라고 한다면 추가적으로 어떤 로직이 필요할까요?
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
숙제 : LinkedList로 Stack, Queue 구현하기
queue : enqueue, dequeue, peekclass Node { prev = null; next = null; constructor(value) { this.value = value; } } class Queue { length = 0; head = null; tail = null; enqueue(value) { // stack.push와 동일 const newNode = new Node(value); if (this.length == 0) { this.head = newNode; this.tail = newNode; } else { newNode.prev = this.tail; this.tail.next = newNode; this.tail = newNode; } this.length++; return this.length; } dequeue() { let rslt; // head.next의 prev를 null로 설정 & head 업데이트 if (this.length > 0) { if (this.length == 1) { rslt = this.head.value; this.head = null; this.tail = null; } else { rslt = this.head.value; this.head.next.prev = null; this.head = this.head.next; } this.length--; } return rslt; } peek() { return this.head?.value; } get length() { return this.length; } } const queue = new Queue(); queue.enqueue(1); queue.enqueue(3); queue.enqueue(5); queue.enqueue(4); queue.enqueue(2); console.log(queue.length); // 5 console.log(queue.dequeue()); // 1 console.log(queue.length); // 4 console.log(queue.peek()); // 3 console.log(queue.dequeue()); // 3 console.log(queue.peek()); // 5 console.log(queue.dequeue()); // 5 console.log(queue.peek()); // 4 console.log(queue.dequeue()); // 4 console.log(queue.dequeue()); // 2 console.log(queue.length); // 0 console.log(queue.dequeue()); // undefined console.log(queue.peek()); // undefined stack : push, pop, topclass Node { prev = null; next = null; constructor(value) { this.value = value; } } class Stack { length = 0; head = null; tail = null; push(value) { // 비어있으면 head = tail = newNode // 그 외엔 tail에다 추가 후 tail 업데이트 const newNode = new Node(value); if (this.length == 0) { this.head = newNode; this.tail = newNode; } else { newNode.prev = this.tail; this.tail.next = newNode; this.tail = newNode; } this.length++; return this.length; } pop() { // tail.prev를 tail로 업데이트 // 비어있거나 하나만 있으면 undefined 반환 let rslt = this.tail?.value; this.tail = !this.tail ? null : this.tail.prev; this.length = this.length - 1 < 0 ? 0 : this.length - 1; return rslt; } top() { return this.tail?.value; } get length() { return this.length; } } const stack = new Stack(); stack.push(1); stack.push(3); stack.push(5); stack.push(4); stack.push(2); console.log(stack.length); // 5 console.log(stack.pop()); // 2 console.log(stack.length); // 4 console.log(stack.top()); // 4 console.log(stack.pop()); // 4 console.log(stack.top()); // 5 console.log(stack.pop()); // 5 console.log(stack.top()); // 3 console.log(stack.pop()); // 3 console.log(stack.pop()); // 1 console.log(stack.length); // 0 console.log(stack.pop()); // undefined console.log(stack.top()); // undefined