묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
unique 교안 s 벡터 erase 질문
vector<int> s {4, 3, 3, 5, 1, 2, 3};s.erase(unique(s.begin(),s.end()),s.end());for(int i : s) cout << i << " ";의 결과가4,3,5,1,2(,2,3 제거) 이렇게 되어야 하지 않나요?왜 4,3,5,1,2,3으로 나오는 건지 잘 모르겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀를 이용한 순열 코드 질문
재귀를 이용한 순열 코드를 학습하면서 이와 관련된 백준 문제를 풀어보려고 하였습니다!백준 15649 N과 M(1) 문제 같은 경우 순열을 출력하는 문제여서 학습한 코드를 사용하면가능할 것이라고 생각했습니다. 그런데 교안에 있는 코드는 순열의 오름차순이 보장이안되는 것 같습니다. 교안에 있는 코드를 최대한 활용해서 백준 15649번 문제를 풀고 싶은데, 순서가 오름차순이 되도록 순열을 출력하려면 교안의 코드를 어떻게 수정해야 할지 모르겠습니다!https://www.acmicpc.net/problem/15649
-
미해결
C++ 클래스 인스턴스의 지역변수 초기화 오류 & C4996 에러
#include<iostream> #include<cstring> #define LENGTH 40 using std::cout; using std::endl; class Person { char* name; int age; public: void SetName(const char* str) { // 설정자는 잘못된 값이 설정되는 것을 방지하기위해, 그 값을 먼저 검사한다. if (!str) return; // 문자열을 멤버 변수 name에 복사 strncpy(name, str, LENGTH); } void SetAge(int n) { age = n < 0 ? 0 : n; } inline char* GetName(const char* str) { return name; } inline int GetAge(int n) { return age; } void Print() { cout << "name: " << name << ", age: " << age << endl; } }; int main() { Person jackson; Person brown; Person dean; // 각 객체의 설정자로 멤버 변수에 값을 설정 jackson.SetName("Michael Jackson"); jackson.SetAge(29); brown.SetName("Charles Brown"); brown.SetAge(40); dean.SetName("James Dean"); dean.SetAge(20); // print out jackson.Print(); brown.Print(); dean.Print(); return 0; } main함수 내에서 Person클래스의 객체 인스턴스들을 만드려는데, 자꾸 저 부분에서 지역변수가 초기화되지 않았다고 하네요... 설정자를 통해서 인스턴스 내 멤버 변수에 값을 대입했는데도 불구하고 말이죠. 정확히 무슨 문제인지 모르겠습니다.2번째는 C4996코드 오류인데요. strncpy함수가 위험성이 있으니 strncpy_s함수를 대신해서 사용하라고 하는데, 보안의 위험성을 떠나서 strncpy함수를 사용하면 오류가 나는 이유가 있나요
-
미해결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만 나와 그 이유를 알고자 합니다. 답변 부탁드립니다.