묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
readline을 어떻게 사용해야 할까요?
안녕하세요 선생님!readline이 입력이 빠르다고 해서 가능하면 readline을 이용해서 입력을 받고 싶습니다.그런데 readline을 이용해서 보드판 입력을 받으면 원하지 않는보드판이 만들어지는데 그 이유를 모르겠어서 질문드립니다!#1import sys sys.stdin=open("input.txt","rt") if __name__=="__main__": board = [ list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(10) ] for x in board: print(x)위처럼 보드를 만들면 첫번째 행은 무시되면서 마지막 행은 빈 리스트가 생성됩니다.#2import sys sys.stdin=open("input.txt","rt") input=sys.stdin.readline().rstrip if __name__=="__main__": board = [ list(map(int, input().split())) for _ in range(10) ] for x in board: print(x)위 처럼 보드 입력을 받으면 첫번째 행을 10개 복사한 보드가 만들어지니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G_12851 숨바꼭질2
안녕하세요 큰돌님! 제가 재귀 함수로 한번 풀어보려 했는데 막히네요...ㅎ 코드를 어느 방향으로 수정해야할지 모르겠습니다 ㅜㅜ http://boj.kr/c824ffda8bc049939849fd836007e3de 혹시라도 재귀로는 그냥 답이 없다면 bfs로 다시 공부하겠습니다..ㅎ
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 정수론 #15736 질문입니다.
n = int(input()) answer = 0 for i in range(n+1): if i**2 > n: break else: answer = i print(answer)이렇게 풀었는데, 백준에서 틀렸습니다.. 왜 틀렸을까요??
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
매출액의 종류 문제 풀이 질문 있습니다
매출액의 종류 문제 풀이 질문 있습니다.public ArrayList<Integer> solution(int n, int k, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < k - 1; i++) { map.put(arr[i], map.getOrDefault(arr[i], 0) + 1); } return answer; }처음에 k-1 개만 map에 세팅해줘야 하는 이유가 뭔가요?k개까지 세팅해야 하지 않나요? 만약에 k개까지 세팅한다면 코드를 다음과 같이 할 수 있는데,이때 두번째 for문의 if문의 조건에서 왜 HM.get(arr[lt])이 1보다 큰지의 여부로 바뀌는 것인가요? public ArrayList<Integer> solution(int n, int k, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < k; i++) { map.put(arr[i], map.getOrDefault(arr[i], 0) + 1); } answer.add(map.size()); int left = 0; for (int right = k; right < n; right++) { map.put(arr[right], map.getOrDefault(arr[right], 0) + 1); if (map.get(arr[left]) > 1) { map.put(arr[left], map.get(arr[left]) - 1); } else { map.remove(arr[left]); } left++; answer.add(map.size()); } return answer; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[4-D_1987_ 알파벳] bfs나 dfs로는 풀 수 없을까요?
처음 최단 거리를 구하는 문제여서 bfs로 접근했습니다. 하지만 bfs로 최단거리를 구할 경우 방문한 알파벳을 다시 방문하면 안된다는 조건 때문에 최댓값이 이상하게 나와서 dfs로도 시도해봤습니다. dfs가 정답과 좀 더 가깝게 잘 짠 것 같은데 마지막 테스트 케이스를 통과하지 못하네요ㅜㅜ 뭔가 둘 다 visited 원복과 초기화가 잘 안되어서 그런 것 같은데 어떻게 해야할지 모르겠습니다 ㅠㅠ 이 코드를 어떻게 수정하면 좋을까요? ㅠㅠ1. bfshttp://boj.kr/eab39a3f2732430eaa02117bc49541f6 dfs http://boj.kr/cf22ef7e2cab42b491ce50258f795253
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-c_17471 1차원 벡터 2차원 벡터
안녕하세요 큰돌님 항상 좋은 강의 감사합니다. 비트 마스킹 문제가 너무 어렵네요...ㅎㅎ 열심히 연습해야겠습니다.질문은 다름이 아니라 간선 정보를 입력 받을 때 1차원 벡터 adj를 선언하셨는데 adj[i].push_back(temp); 이런 형태로 push 하면 2차원 벡터로 되는 것 아닌가요? 부분 코드vector<int> adj[11];...int main{for(int i=1; i<=n; i++){ cin >> m; for(int j=0; j<m; j++){ cin >>temp; adj[i].push_back(temp); // <- 여기 이 부분 2차원 벡터여야 가능한거 아닌가요? adj[temp].push_back(i); } } ...제가 생각한 1차원 벡터 2차원 벡터는 아래 그림과 같습니다.아 그리고 제 그림 좋게 봐주셔서 감사합니다.ㅎㅎ 이해하는데에는 큰돌님 말씀처럼 직접 그리는 것 만큼 좋은게 없더라구요 혹시 몰라 전체 코드도 남깁니다!http://boj.kr/9fea383a1aba4c2ca268cf51acc08257
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
14627 파닭파닭 문제 질문!
안녕하세요 항상 좋은 강의 감사합니다.문제를 푸는 도중 의문점이 생겨 문의 드립니다.저는 밑 코드처럼 코드를 짰는데,제 생각에는 파닭에 넣을 파의 최대 길이(즉, high)값은 가장 짧은 파의 길이보다 길 수 없으므로 (왜냐면 2개의 파를 쓸수없기때문)처음 입력을 받는 과정에서 min값을 구하여 그 값을 high로 설정하고 문제를 풀었습니다.그런데 그 코드에서는 실패하고 선생님 코드처럼 high값을 1e9로 설정하여야 통과하더라고요어떤 부분에서 문제점이 있는지 궁금합니다.#include<bits/stdc++.h> using namespace std; typedef long long ll; ll S, C, minnum=1000000000, num, msum, ret; void solve(vector<ll>& vec) { ll lo = 1; // lo를 0으로 하게되면 mid가 0이되는 경우가 생겨 /0을 하게되어 오류가 나게된다. ll hi = minnum; ll mid; while (lo <= hi) { mid = (lo + hi) / (1LL * 2); ll cnt = 0; for (int i = 0; i < S; i++) cnt += vec[i] / mid; if (cnt >= C) { // 가능한 경우 더 줄여보기 lo = mid + 1; ret = mid; // ret을 정해야하는 이유는 마지막으로 가능했던 수가 최종수가 되기 때문이다. } else { hi = mid - 1; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); vector<ll> vec; cin >> S >> C; for (int i = 0; i < S; i++) { cin >> num; minnum = min(minnum, num); // minnum을 구해야하는 이유는 최대 파의 양이기 때문이다. msum += num; // 총 파의양은 남는파의 양을 구할때 사용된다. vec.push_back(num); } solve(vec); cout << msum - ret*C << "\n"; return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 질문
글자가 이상하게 올라갔네요 다시 질문올립니다.강의를 듣고 아래 코드처럼 다시 한번 풀어봤습니다.main함수 안에서 풀었을 때는 통과가 되었는데 bfs를 밖으로 빼서 풀었더니 틀리게 되었습니다.틀린 원인이 bfs를 밖으로 빼서 그런건지 아니면 제가 확인하지 못한 로직이 문제가 있는지 모르겠습니다.http://boj.kr/4f01272dd1a042cd96cb875dbb4bb1e0링크도 잘못올려서 다시 수정해서 올렸습니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
split() 시간복잡도
유사한 질문이 있어서 답변을 보고 시간복잡도를 개선할 수 있는 split()코드를 짜봤는데요.하지만 제가 짠 split() 코드에 생각못한 맹점이 있는지, 이렇게 사용을 해도 되는지 궁금해서 질문올립니다.시간초과 코드http://boj.kr/2ea82a9bda6a40f9a88765151f190df9통과 코드 http://boj.kr/583e73a687c145d3b354c1ecca0ad631이 문제에서는 다른 질문에서 말씀해주신대로 그냥 공백을 제외하고 숫자를 세는 방법이 더 좋고, 저도 그렇게 풀긴했지만 split()으로 한 번 풀어보고 싶어서 도전하다가 이렇게 만들어봤습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 듣고 아래 코드처럼 다시 한번 풀어봤습니다.main함수 안에서 풀었을 때는 통과가 되었는데 bfs를 밖으로 빼서 풀었더니 틀리게 되었습니다.틀린 원인이 bfs를 밖으로 빼서 그런건지 아니면 제가 확인하지 못한 로직이 문제가 있는지 모르겠습니다. #include <bits/stdc++.h> using namespace std; #define y1 aaaa int n, m, x1, y1, x2, y2, visited[304][304], cnt; char a[304][304]; string s; const int dy[] = {-1, 0, 1, 0}; const int dx[] = {0, 1, 0, -1}; void bfs(int sy, int sx, int ey, int ex){ visited[sy][sx] = 1; queue<int> q; q.push(1000*sy + sx); while(a[ey][ex] != '0'){ cnt++; queue<int> temp; while(q.size()){ int y = q.front()/1000; int x = q.front()%1000; q.pop(); for(int i=0; i<4; i++){ int ny = y+dy[i]; int nx = x+dx[i]; if(ny<0 || ny>=n || nx<0 || nx>=m || visited[ny][nx]) continue; visited[ny][nx] = cnt; if(a[ny][nx] == '0'){ //0을 만나면 q에 0이 없을때까지 계속 돈다. q.push(1000*ny + nx); } else{ //1이나 목적지#을 만나면 0으로 바꾸고 그 위치를 temp에 기억해둔다. a[ny][nx] = '0'; temp.push(1000*ny + nx); } } } //q에 0이 없어지면 temp에 저장해두었던 1의 위치들을 q에 다시 넣어서 //0에서 했던 과정들을 다시 반복해준다. q = temp; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; cin >> x1 >> y1 >> x2 >> y2; x1--, y1--, x2--, y2--; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin >> a[i][j]; } } bfs(y1, x1, y2, x2); cout << visited[y2][x2] << '\n'; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-A_ 2792 보석상자 강의 질문
안녕하세요 큰돌님 강의를 듣다가 질문이 생겼습니다!큰돌님께서 3분쯤에 질투심을 4로 하면 조건 충족을 못하신다고 하셨는데 보석을 못받는 학생이 생겨도 되므로 질투심 4일때는 조건은 만족하지만 최소값은 아니여서 정답이 아닌걸로 생각했습니다. 아래 그림을 봐주시면 질투심이 2일 때 학생수가 6명이 필요하므로 check함수의 n(학생수)>=num(질투심)을 충족하지 못한다고 생각했습니다. 제가 잘못 생각한 것일까요..?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 출력 관련 질문입니다.
선생님이 보여주신 코드를 제 IDE에 옮기고 실행을 시켜봤습니다. 그리고 예시 입력을 넣어보면 3a*dabcdanestonestodfacebookDADA이렇게 출력이 되면서 마지막 NE가 나오지 않고 프로그램이 종료가 안 되고 계속 돌아가네요.그런데 답 제출을 해보면 맞았다고는 나옵니다.왜 이러는걸까요..?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K 반례 알 수 있을까요...
http://boj.kr/fc8456e934554241bd6ece53be433384 나름 테스트 케이스도 통과를 하고 의심되는 케이스를 모두 돌려보았는데 에러가 납니다... 왜 일까요..
-
해결됨코딩테스트 [ ALL IN ONE ]
메모리 주소의 길이
연결리스트 (Linked List) - 1 강의 보면서 같이 디버깅해보는 중인데요강사님 화면에는 메모리 주소가 11자리로 나오는데저는 메모리 주소가 훨씬 길게 표시됩니다.이건 왜 그런 건가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
dfs 탐색 순서
안녕하세요 큰돌님 dfs 공부하다가 탐색 순서가 헷갈려서 질문 드립니다. 제가 아래에 코드 링크를 첨부했는데요. 아래 그림에서 탐색 순서가 왜 저렇게 나오는지 모르겠습니다 ㅜㅜ http://boj.kr/f89c319ec14048a2a042c5a4c7027d60
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-F 질문이 있습니다 선생님!
안녕하세요 1-F 문제 풀 때 질문이 있어서 글 남깁니다.대문자, 소문자를 판단할 때 isAlpha 라는 함수가 있던데 이런걸 실제 코딩 테스트에선 사용하지 않는 것이 좋은건가요?이걸 활용해서 풀어보니 제 IDE에선 입출력에 맞게 잘 통과가 되는데 백준에선 오답이라고 나와서요!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
왜 오답처리 되는지 모르겠습니다.
package infren.section1; import java.util.Scanner; public class section1_10 { static String solution(String s, String t) { String answer = ""; int[] tmp = new int[s.length()]; int p = 1; for (int i = 0; i < tmp.length; i++) { if (String.valueOf(s.charAt(i)).equals(t)) { tmp[i] = 0; p = 1; } else { tmp[i] = p++; } } p = 1000; for (int i = tmp.length - 1; i >= 0; i--) { if (String.valueOf(s.charAt(i)).equals(t)) { tmp[i] = 0; p = 1; } else { tmp[i] = Math.min(tmp[i], p++); } } for (int i = 0; i < tmp.length; i++) { answer += tmp[i] + " "; } return answer; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] tc = sc.nextLine().split(" "); String s = tc[0]; String t = tc[1]; String answer = solution(s, t); System.out.println(answer); } }출력값은 정답과 동일하게 나오는데 제출을 하면 오답처리로 되는데 어디가 문제인지 모르겠습니다
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이러한 방식도 가능할까여??
4중 for문이 이해가 안가 이런식으로 만들어봤는데 혹시 가능한가요? <html> <head> <meta charset="UTF-8"> <title>출력결과</title> </head> <body> <script> function solution(test){ let mathScore = {}; let possible = false; let answer=0; test.map((t)=>{ t.map((t2,index)=>{ mathScore[t2] = mathScore[t2]? [...mathScore[t2],index+1]:[index+1] }) }) for(let i =1; i<test.length+1; i++){ for(let j=1; j<test.length+1; j++){ if(i!==j){ for(let k=0; k<test.length; k++){ if(mathScore[i][k] < mathScore[j][k]){ possible= true; } } } } possible?answer++:null possible = false; } return answer; } let arr=[[3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2]]; console.log(solution(arr)); </script> </body> </html>
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-G 런타임 에러
http://boj.kr/26f14293f96747a4b1f788ac70d98df2http://boj.kr/8f84f821f3014eef85b9d0fbc4cedcde 런타임 에러가 나오는데 이유를 모르겠습니다. 큰돌님과 다른 부분은 소수 판별 부분과 while문에 조건을 넣었다는 것 밖에는 없는 것 같은데 이상하네요..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D_4179 불! 틀렸습니다..
테스트 예제는 맞게 나오는데 어디가 백준에서 11% 정도 되면 틀렸다고 뜸니다.. 어디가 문제일까요?ㅠㅠ 2시간째 보고 있는데 못찾겠습니다.. http://boj.kr/c6e3f5dbdd7649928958e43c0ed48238