묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-G 자료형 질문
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> #include<algorithm> #include<queue> #include<numeric> #include<map> #include<cstring> using namespace std; typedef long long ll; long double X, Y; int Z; bool check(ll mid) { double total = X; double win = Y; total += mid; win += mid; int num = (win / total) * 100; return Z < num; } int main() { cin >> X >> Y; Z = (Y / X) * 100; int start = 1; int end = 1000000000; int ans = -1; while (start <= end) { ll mid = start + end; mid /= 2; if (check(mid)) { ans = mid; end = mid - 1; } else start = mid + 1; } cout << ans; return 0; } 다음과 같이 작성했습니다.Z = (Y / X) * 100;이 부분에서 X,Y가 double이면 오답long double이면 정답이 나옵니다 .double로 선언하면 어떤 문제점이 존재하나요??
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
list #2강의 18:48~ 중간 삽입/삭제와 임의접근의 모순
안녕하십니까 강사님 항상 고생하십니다.list에 대해서 복습을 하던 중 의문점이 생겨 질문 드립니다. 해당 강의의 중간 삽입/삭제와 임의접근의 모순에 대해선 내용을 이해 했습니다. 여기서 생기는 의문점이 그렇다면 remove()는 왜 구현해 놨을까? 입니다. remove()는 동작할 때 리스트항목을 모두 순회하여 해당 값을 지우는 걸로 알고 있습니다.이것 또한 지우는 것 자체는 빠르겠으나 그전에 하는 순회는 리스트의 크기가 커질수록 아주 느릴텐데, 그 위치를 기억하고 있던 것도 아니고 왜그런 remove()를 임의접근처럼 막아 놓지 않았는지 궁금합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-q 질문
http://boj.kr/8eda4400f8474a6daf339737ce6eda82선생님 제가 dfs시 n*m범위를 벗어나면 1을 return하는 코드를 짜보았습니다. 그런데 범위에 벗어나면 이라는 if 문에 제 코드가 접근을 못합니다. 혹시 이유를 찾아주시면 정말 감사하겠습니다!!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8 - G 탑다운 방식으로는 안될까요?
안녕하세요!17623번 괄호 문제를 풀다가 어려운 점이 생겨 질문드리게 되었습니다. 저는 탑다운 방식으로 접근을 해보았는데요. 괄호를 넣을 수 있는 경우의 수에 따라 dmap값을 비교하여 최소값을 찾는 방식으로 풀어보았습니다. 하지만 서브태스크3을 통과하지 못하네요. 무엇이 문제일까요...? 고민해보아도 쉽게 찾아지지 않습니다. #include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; int T; string dp[1001]; bool check(string before, string after){ if(before == "" && after == "") return false; if(before == "") return true; if(before.size() > after.size()) return true; else if(before.size() < after.size()) return false; return before > after; } string go(int num) { if(num == 0) return ""; if(dp[num] != "N") return dp[num]; if(num - 1 >= 0) // 1빼기 -> 0이 아니라면 무조건 통과하는 조건 { // dp[i]에 직접 값을 넣는다. string temp = go(num - 1); if(check(temp + "12", "12" + temp)) dp[num] = "12" + temp; else dp[num] = temp + "12"; } if(num - 2 >= 0) // 2빼기 { string temp = go(num - 2); if(check(dp[num], temp + "34")) dp[num] = temp + "34"; if(check(dp[num], "34" + temp)) dp[num] = "34" + temp; } if(num - 3 >= 0) // 3빼기 { string temp = go(num - 3); if(check(dp[num], temp + "56")) dp[num] = temp + "56"; if(check(dp[num], "56" + temp)) dp[num] = "56" + temp; } if(num % 2 == 0) // 2로 나눔 { string temp = go(num / 2); if(check(dp[num], "1" + temp + "2")) dp[num] = "1" + temp + "2"; } if(num % 3 == 0) // 3로 나눔 { string temp = go(num / 3); if(check(dp[num], "3" + temp + "4")) dp[num] = "3" + temp + "4"; } if(num % 5 == 0) // 5로 나눔 { string temp = go(num / 5); if(check(dp[num], "5" + temp + "6")) dp[num] = "5" + temp + "6"; } return dp[num]; } string getPassing(string num) { string s = ""; int i = 0; while(i < num.size()) { char digit = num[i]; string d = ""; if(digit == '1') d = "("; else if(digit == '2') d = ")"; else if(digit == '3') d = "{"; else if(digit == '4') d = "}"; else if(digit == '5') d = "["; else if(digit == '6') d = "]"; s += d; i++; } return s; } int main() { fill(dp, dp + 1001, "N"); cin >> T; for(int i = 0; i < T; i++) { int N; cin >> N; string answer = go(N); cout << getPassing(answer) << "\n"; } return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-s
선생님 2s 문제에 입력이 653143645345라고 들어올경우. 한번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호는 1-3-5-4-6으로 5가지 입니다.이때 만약 선생님이 쓰신 코드처럼 dfs에 visited를 설정한다면 1-3-4-6을 탐색한후 1-3-5-4-6을 탐색하려면 4가 이미 visited로 겹치기에 1-3-5-4-6경로를 탐색을 안하게되는것 아닌가요??
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
weak_ptr 질문
weak_ptr은 래퍼런스 카운트를 증가시키지 않는 포인터로 알고 있는데요강의 내용에는 week_ptr도 래퍼런스 카운트가 있는것처럼 강의 해주셔서 햇갈리네요..존재하긴하나 증가 시키지만 않는건가요??? week_ptr은 래퍼런스 카운트를 증가시키지않는 약한(?) 포인터로 가리키고 있다가가리키고 있는 메모리가 유효한지 확인하기 위해 shared_ptr로 접근해보고유효한지 아닌지 판단한다고 알고있습니다 어떤게 맞는걸까요?? 제가 틀리게 알고있던걸까요?? 오래돼서 했갈립니다 ㅠㅠ
-
미해결홍정모의 따라하며 배우는 C++
5.10강 '++'를 넣어도 '+'로 인지되는 문제
안녕하세요, 아래 코드를 작동하던 중, op에 ++를 입력하여도 +로 입력받는 현상이 있습니다. 이유를 모르겠습니다.감사합니다#include <iostream> using namespace std; int getInt() { cout << "Enter int: "; int x; cin >> x; std::cin.ignore(32767, '\n'); return x; } char getOperator() { cout << "Enter op: "; char op; cin >> op; std::cin.ignore(32767, '\n'); return op; } void printResult(int x, char op, int y) { if (op == '+') cout << x + y << endl; else if (op == '-') cout << x - y << endl; else { cout << "Invalid op" << endl; } } int main() { int x = getInt(); char op = getOperator(); int y = getInt(); cout << x << op << y << endl; printResult(x, op, y); return 0; } >> Enter int: 234 Enter op: ++ Enter int: 3434 234+3434 3668
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-F 맞왜틀 질문 있습니다ㅠㅠ
안녕하세요, 선생님! 많이 부족하지만 천천히 선생님 수업 따라가고 있는 학생입니다..다름이 아니라 해당 문제를 풀면서 선생님께서 제시해주신 반례나 백준 질문에 올라온 반례도 대입 했을 때 기대값을 잘 출력하고 있는데 왜 맞왜틀인지 모르겠습니다ㅠㅠ코드 한 번 피드백 부탁드립니다!소스코드 - http://boj.kr/9bc5b7b855044809bdbfa4d5762b69aa 만약N = 10M = 3J = 5 일 경우10 > 5 > 1 > 7 > 2 순으로 사과가 떨어진다고 가정 했을 때 그림으로 그려보면 아래의 이미지와 같이 바구니에 담을 수 있는 최소 이동값이 21 이 도출되지 않나 생각하는데, 혹시 제가 잘못 이해하고 있는걸까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-J k=n*j+i로 하면 식이 어떻게 될까요
세로탐색 처음에 이렇게 했는데 안되네요 인덱스가 어렵네요 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-I 이렇게 풀었는데 코테에서 ios_base::syn~ 를 쓸 일이 있나요?
코드입니다 추가하니까 시간초과 안되고 풀렸네요#include<iostream> using namespace std; string s; int n,x,m; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for(int i=0;i<n;i++){ cin >> s; if(s=="add"){ cin >> x; m |= (1<<x); }else if(s=="remove"){ cin >> x; m &= ~(1<<x); }else if(s=="check"){ cin >> x; if(m&(1<<x))cout<<"1\n"; else cout<<"0\n"; }else if(s=="toggle"){ cin >> x; m ^= (1<<x); }else if(s=="all"){ m = (1<<21)-1; }else if(s=="empty"){ m = 0; } } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H segmentation fault 뜨는이유가
-1,0,1,00,1,0,-1이렇게 습관처럼 쓰다 이번에 걸렸네요 ㅋㅋㅋ비트마스킹에 맞춰서 했어야했네요 ㅠㅠ
-
해결됨홍정모의 따라하며 배우는 C++
강의 들으면서 궁금증이 생겼습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 함수의 매개변수로 배열이 오는 경우 doSomething(int students_scores[20] 처럼, 함수 정의에서 나타나는 students_scores가 내부적으로 포인터로 인식한다고 했는데, 그렇다면 이 함수내에서 students_scores는 배열의 시작주소만 있을 뿐 이 배열의 크기가 얼마나 될지 몰라서, 만약 int형 배열 20개를 doSomething의 인자로 집어넣을 경우, 배열의 size인 20도 같이 넣어줘야 한다고 봐도 될까요? 왜냐하면 만약 doSomething내부적으로 size인자도 같이 안넘길경우, size범위를 초과하면 오류가 생길 수도 있으니깐요.. 맞게 해석한지 궁금합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-Q 2636 치즈
선생님 어떻게 하면 다르게 풀 수 있을까 생각하던 중 dfs 자체에 치즈가 있는 곳을 0으로 바꿔주면서 방문처리하면 어떨까싶은 발상으로 다르게 풀어봤는데 95%쯤에서 틀렸다고 뜨네요 어떤 반례가 있는지 도저히 못 찾겠습니다. 도와주세요ㅠㅠhttp://boj.kr/b5740f5f59ce438aa9c890edbce7aba7
-
미해결홍정모의 따라하며 배우는 C++
-98 출력하는 방법
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 98 -> 0110 0101이고-98 -> 2의 보수를 취해서 1001 1100 인데int a = 1001 1100을 선언하고cout으로 출력하면 -98이 아닌 156이 나옵니다.앞에 최상위 비트를 부호로 인식하게 해서출력하는 방법이 어떻게 되나요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 틀린 부분을 모르겠습니다.
안녕하세요 큰돌님 틀린부분을 찾는것이 어려워 질문드립니다. 아래는 공유 코드입니다http://boj.kr/251487f67822488681eee85d4012f297 불이 퍼지지 못하거나 없는경우를 처리해주지 않앗을땐 61%가 나왔는데처리해주고나서 바로 틀렸다 나오네요..사람들이 올려놓은 테스트 케이스도 다 잘 나오는데 어떤부분이 잘못되서 안되는건지 아무리봐도 모르겠습니다 도와주십쇼 ㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-H 질문있습니다!
https://www.acmicpc.net/source/60946356이 코드의 반례를 못 찾겠습니다....1조건 2조건 3조건 차례대로 검사하고 틀리면 바로 not acceptable이 나오도록 했습니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문이있습니다!!
안녕하세요 선생님 좋은 수업 제공해 주셔서 감사드리다는 말씀 드립니다.제가 작성한 코드에 문제를 못찾겠어서 질문을 드립니다.저는 stack에 문자를 쌓고 나중에 pop을 통해 빼서 '('이 나오면 cnt++를하고 아니면 빼기를 통해 마지막에 0이 나오면 yes no를 나오게 하여 작성하였습니다. 그런데 계속 no만 나와 그 이유를 알고자 합니다. 답변 부탁드립니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
토마토 시간초과 질문입니다
선생님 풀이 보기 전에 두가지 방법으로 풀었는데 두 방법모두 4, 5번 input에 대해 시간초과가 나옵니다 대량 3~4초씩 걸립니다 ㅠㅠ두가지 방법 하나는 선생님 풀이와 사소한 부분을 제외하면 같은 방식이고, 다른 하나는 pair를 사용해서 level을 올리는 방식으로 했습니다. 두번째 방식 코드 올려봅니다.왜 시간초과가 생기는 것일까요..?ㅠㅠ#include<iostream> using namespace std; #include<vector> #include<algorithm> #include<queue> struct Pos { bool operator==(const Pos& other) { return y == other.y && x == other.x; } bool operator!=(const Pos& other) { return !(*this == other); } Pos operator+(const Pos& other) { Pos tmp = *this; tmp.y = tmp.y + other.y; tmp.x = tmp.x + other.x; return tmp; } int y; int x; }; Pos front[4] = { {-1, 0}, {0, 1}, {1, 0}, {0, -1}, }; int main(void) { cin.tie(NULL); ios_base::sync_with_stdio(false); freopen("in5.txt", "rt", stdin); // 파일 입력받음 int n, m; // n은 상자 세로, m은 상자 가로 cin >> m >> n; vector<vector<int>> box(n, vector<int>(m)); queue<pair<Pos, int>> q; for (int y = 0; y < n; y++) { for (int x = 0; x < m; x++) { cin >> box[y][x]; if (box[y][x] == 1) { q.push(make_pair(Pos{ y, x }, 0)); } } } int now_lv; while (q.empty() == false) { pair<Pos, int> tmp = q.front(); q.pop(); Pos now = tmp.first; now_lv = tmp.second; for (int dir = 0; dir < 4; dir++) { Pos next = now + front[dir]; if (next.y<0 || next.y>n - 1 || next.x<0 || next.x>m - 1) continue; if (box[next.y][next.x] == -1 || box[next.y][next.x] == 1) continue; box[next.y][next.x] = 1; q.push(make_pair(next, now_lv + 1)); } } for (int y = 0; y < n; y++) { for (int x = 0; x < m; x++) { if (box[y][x] == 0) { cout << "-1"; return 0; } } } cout << now_lv; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
17406 변수명이 겹쳤을 때 질문
안녕하세요 강사님http://boj.kr/5dfc0dabb69045c6980f9ea7c7af0072해당 코드에서 53번째 줄 Board b와 61번째 줄 int bb가 통과 전에는 둘 다 b로 선언해서 맞왜틀로 시간을 좀 썼는데요.. 코드 제출 전에 제가 디버깅할 때는 답도 잘 출력되고 따로 에러도 안 떠서 아무 문제가 없는줄 알았는데 제출할 때만 틀렸습니다가 뜨는 이유가 무엇일까요?
-
미해결홍정모의 따라하며 배우는 C++
6.6 C언어 스타일의 배열 문자열 - strcmp 구현
- 맞게 잘 구현했을까요 ?