
입력 값 질문 있습니다!
16시간 전
scanf로 받아올 때 "%[^\n]s"로 받아오면 안되는걸까요?
제가 짠 코드의 문제점이 뭘까요?
18시간 전
int n, cnt, i, tmp;
scanf("%d", &n);
for(i=2; i<=n; i++){
if(i==2||i==3||i==5) cnt++;
tmp=i;
if(tmp%2==0||tmp%3==0||tmp%5==0) continue;
cnt++;
}
printf("%d", cnt);
return 0;
n에 200,000을 입력했을 때 다른 값이 나와서 어떤 문제점 때문인지 알고 싶습니다.
그리고 이런 방식의 코드는 비효율적일까요?
시간복잡도 문의
1일 전
시간복잡도가... 풀이와 같이 하면
j = 1일때 n번
j = 2일때 n/2번
j = 3일때 n/3번
…
j = n일때 n/n번
즉 total n * (1 + 1/2+1/3+…+1/n) 를 계산한 것이
시간복잡도가 되는것 맞나요 ? 아직 미흡해서 질문 남깁니다
std? vector?
2일 전
선생님 이런 질문 드려서 정말 죄송합니다.
그렇지만 컴맹인 제가 기본 c언어 문법부터 선생님 강의만 믿고 따라왔습니다. 그런데 그쪽에서도 여기서도 설명해주시지 않았던 , 나오지 않던 cin?cout? std::vector 이나 #include <vector> 이런것들이 나오니 너무 당황스럽습니다.
죄송하지만 어떻게 하면 따라갈수 있을까요 ,,? 어떤 강의를 듣고 오라면 듣고 오겠습니다 ㅜㅜㅜ 따라가고 싶은데 모르는 내용에 너무 답답해서 질문 남겨봅니다 ㅜㅜ
선생님 질문이 있습니다ㅜㅜ
2일 전
저는 코드를 다음과같이 작성을 해보았는데요,
40점이 뜨고, 문제점이 뭔지도 알고 있습니다.
일단 저는 강의를 듣기 전에 코드를 작성해보는 편입니다.제 코드는 무조건 반드시 1일차의 상담을 선택하는 상황으로 가지가 계속 뻗어나가게만 이루어져 있습니다.
그래서 1일차의 상담을 선택했을때 분기가 모두 끝나는 것도 디버깅으로 확인을 했는데 그 이후 몇시간을 고민했는데도 풀리지 않네요.
N의 범위를 넘어가지 않으면서2일차 강의, 3일차 강의를 선택하는 모든 경우의 수 까지도 고려하고 싶은데 거기서 손을 쓸 수가 없습니다.
이 문제를 해결하려면 제 코드에 어디를 손봐야할까요?ㅜㅜ
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
int* T;
int* P;
int N;
int Tindex = 0;
int Total = 0;
int totalarray[100];
int cnt = 0;
void DFS(int Tindex, int Total) {
if (Tindex + T[Tindex] > N) { totalarray[cnt++] = Total; return; }
else {
DFS(Tindex + T[Tindex], Total + P[Tindex + T[Tindex]]);
}
}
int main() {
scanf("%d", &N);
T = (int*)malloc(sizeof(int) * (N + 1));
P = (int*)malloc(sizeof(int) * (N + 1));
for (int i = 1; i < N+1; i++) {
scanf("%d %d", &T[i], &P[i]);
}
T[0] = 1;
P[0] = 0;
DFS(0, 0);
//DFS(1, 0);
int max = 0;
for (int i = 0; i < 100; i++) {
if (max < totalarray[i]) {
max = totalarray[i];
}
}
printf("%d", max);
}
13번, 다른 방식으로 도전하였는데 다 틀렸다고 나와서 어디가 문제인지 알고싶습니다.
3일 전
안녕하세요 선생님.
강의 재밌게 듣고 있습니다.
13번을 완전히 다른 방식으로 푼 거 같아서 이 방식으로도 풀고 싶어서 올립니다.
답은 잘 나오는 거 같은데 채점기에 돌리니 다 틀렸다고해서 어디서 틀린건지 모르겠습니다.
감사합니다.
#include <iostream>
using namespace std;
int count[10];
int main(int argc, char** argv) {
//freopen("input.txt","rt",stdin);
int max = 0, n;
scanf("%d", &n);
while(n > 0){
count[n%10]++;
n/=10;
}
for(int i = 1; i < 10; i++){
if(count[max] <= count[i]) max = i;
}
printf("%d\n", max);
return 0;
}
선생님, 제 코드에 질문이 있습니다.
3일 전
#include<stdio.h>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
queue<int> map;
vector<int> Q[10001];
int check[10001];
int PathCost[10001];
int count = 0;
int movement[3] = { 1,-1,5 };
int main() {
int S, E;
scanf("%d %d", &S, &E);
check[S] = 1; //중복 계산을 피하기 위해. 방문 표시를 해준다.
PathCost[S] = 0;
map.push(S);
while (!map.empty()) {
int current = map.front(); //현재 5이다.
//current와 연결되어 있는 것들을 모두 찾아준다.
map.pop();
for (int i = 0; i < 3; i++) {
int result = current + movement[i];
map.push(result);
if (result == E) { printf("%d ", PathCost[result]); }
if (check[result] == 0) {
check[result]=1;
PathCost[result] = PathCost[current] + check[result];
map.push(result);
}
else {
continue;
}
}
}
}
79번, prim 알고리즘 문제 내에서 질문드립니다.
4일 전
안녕하세요. 강의 잘듣고 있고 있습니다 ^^
강의에선 main() 함수 내에서 push(),pop() 을 수행하는걸로 소스를 구현하셨는데요,
이를 별도의 함수로 만들어서 구현할 때, main에서 생성한 인접 리스트를
함수의 매개변수로 전달하는 부분에 대해서 궁금합니다.
예를 들면,
int makeRoute(vector<pair<int,int> > &map[]){ ...}
int main(){
vector<pair <int ,int> > map[30];
cout<<makeRoute(map);
}
윗처럼 전달하면 에러가나는데,
이유를 잘 모르겠습니다.
(일반 배열처럼 배열의 이름으로 넘기면 될줄 알았는데...)
항상 Java로 개발하다가 오랫만에 C++하려니까 헷갈리는 부분이 많네요.
어리석은 질문일수있지만, 도움부탁드리겠습니다~
선생님, 질문이 있습니다.
4일 전
선생님, 안녕하세요?
일단 코드 작성했고 예제는 잘 결과가 나오는데 제가 한 방식에 확신이 없어서 질문을 드립니다.
저는 작성될 각 노드에 대한 최소비용경로를 구할 때
체크방문배열(1로 된 것)과 현재 큐에 들어온 노드까지의 경로값을 누적하는 방법으로 최단경로를 구했습니다.
해당 부분에 주석을 달아두었는데 이 방법이 다른 예제들에 대해서도 맞는지 수업을 듣기 전에 미리 먼저 물어보고 싶습니다.
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdio.h>
using namespace std;
int Q[101];
int front = 0, back = 0;
int ch[101];
int N, M;
vector <int> Queue[101];
int PathCost[101];
int target = 2;
int main() {
scanf("%d %d", &N, &M);
int SNode, TNode;
for (int i = 0; i < M; i++) {
scanf("%d %d", &SNode, &TNode);
Queue[SNode].push_back(TNode);
}
/*for (int i = 0; i < N+1; i++) {
for (int j = 0; j < Queue[i].size(); j++) {
printf("%d ", Queue[i][j]);
}
printf("\n");
}*/
//최초 시작점을 설정
ch[1] = 1;
Q[++back] = 1;
int current;
while (front < back) {
current = Q[++front]; //현재 1
for (int i = 0; i < Queue[current].size(); i++) {
//먼저 한 번만에 갈 수 있는 정점 판단
if (ch[Queue[current][i]] == 0) { //아직방문하지 않았다면
Q[++back] = Queue[current][i]; //뒤에 추가를 한다.
ch[Queue[current][i]]=1; //그리고 방문처리를 해준다.
//이게 맞는건지 궁금합니다.
PathCost[Queue[current][i]] = PathCost[current] + ch[Queue[current][i]];
}
}
}
for (int i = 2; i < N + 1; i++) {
printf("%d : %d \n", i, PathCost[i]);
}
}
채점할때 마지막 케이스에서 자꾸 4가 출력이 되어서 오답처리가 됩니다
5일 전
확인해보니 31번째 인덱스일때 카운트가 하나 올라가는데 어떤 부분에서 잘못된건지 파악을 잘 못하겠습니다ㅠㅠㅠ
// 19. 분노 유발자
#include <iostream>
using namespace std;
int main() {
int n, arr[100] = { 0, }, cnt = 0, flag;
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < n - 1; i++) {
flag = 0;
for (int j = i + 1; j < n; j++) {
if (arr[i] < arr[j]) {
flag = 1;
break;
}
}
if (!flag)cnt++;
}
cout << cnt;
}
재귀와 반복문의 차이
6일 전
안녕하세요 선생님질문이 있어서 글을 남깁니다.제가 이번에 면접을 봤습니다. 피보나치 1. 재귀 구현2. 반복문 구현을 하고 3.둘중에 어떤게 더 빠르고 그 이유?문제였습니다.4명 면접관들 앞에서 푸느라고 긴장을 많이 했지만.. 다행히 1,2번은 풀이를 했습니다. 근데 3번에서 대답을 잘 못하겠더라구요......ㅠㅠ혹시 스택오버플로우가 발생하지 않는다고 가정했을때 어떤게 더 빠르고 그 이유가 무엇인가요??.. 분명 반복문이 빠를텐데 그 이유를 콕 집어서 설명을 잘 못하겠더라구요.
67번
6일 전
안녕하세요 선생님
선생님 코드에서 int i; 를 DFS 함수와 main 함수 각각 따로 선언하지 않고 전역변수로 잡았더니 답이 13이 아니라 22가 나왔습니다. 저는 어차피 둘 다 i가 나와서 한번에 전역변수로 잡자고 생각했는데 안되네요. 왜 안되는지 설명부탁드립니다.
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int map[30][30], ch[30], n, cost=2147000000;
int i;
void DFS(int v, int sum){
if(v==n){
if(sum<cost) cost=sum;
}
else{
for(i=1; i<=n; i++){
if(map[v][i]>0 && ch[i]==0){
ch[i]=1;
DFS(i, sum+map[v][i]);
ch[i]=0;
}
}
}
}
int main(){
//freopen("input.txt", "rt", stdin);
int m, a, b, c;
scanf("%d %d", &n, &m);
for(i=1; i<=m; i++){
scanf("%d %d %d", &a, &b, &c);
map[a][b]=c;
}
ch[1]=1;
DFS(1, 0);
printf("%d\n", cost);
return 0;
}
4번만 통과가 안되는데, 많이 고민해봤으나 잘모르겠네요..!
8일 전
#include <stdio.h>
int main() {
//f9는 컴파일, f10은 실행.
//채점받을때는 freopen주석처리하고 하기.
//freopen("input.txt", "rt", stdin);
char first_str[105], sec_str[105];
int len_first_str=0, len_sec_str=0;
int flag_res=1;
scanf("%s", &first_str);
//printf("%s\n", first_str);
scanf("%s", &sec_str);
//각 길이 구하기
for(int i=0; first_str[i] != '\0'; i++) {
len_first_str++;
}
for(int i=0; sec_str[i] != '\0'; i++) {
len_sec_str++;
}
//printf("len_first_str : %d\n", len_first_str);
//길이가 다르면 NO
if(len_first_str != len_sec_str) {
printf("NO");
return 0;
}
else { //길이가 같으면 비교해보기, 각 char이 같다면, first_str의 각자리를 0으로 치환
for(int i=0; i<len_first_str; i++) {
for(int j=0; j<len_first_str; j++) {
if(first_str[i] == sec_str[j]) {
first_str[i] = 0;
break;
}
}
//printf("first_str is : %s\n", first_str);
}
// 모두 0이라면 YES, 아니면 NO
for(int i=0; i<len_first_str; i++) {
if(first_str[i] != 0) {
flag_res = 0;
break;
}
}
if(flag_res == 1) {
printf("YES");
}
else if(flag_res == 0) {
printf("NO");
}
}
return 0;
}
37번 LRU
11일 전
37번 LRU#include <iostream>#include <string>#include <vector>#include <cstdlib>
using namespace std;int main(int argc, char** argv) { int s,n, wNum, hit = -1, tmp, usedSize = 0; cin >> s >> n; vector<int> v(s);
cout << "s : " <<s << " " << "n : " << n << "\n"; for(int t = 0; t < n; t++) { cin >> wNum; for(int i = 0; i < v.size(); i++) { if(v[i] == wNum) { hit = i; break; } }
//hit일때 if(hit != -1) { tmp = v[hit]; for(int i = hit - 1; i>=0; i--) { v[i+1] = v[i]; } } else { for(int i = s-1; i>=0; i--) { v[i+1] = v[i]; } }
v[0] = wNum; hit = -1; } for(int i = 0; i < s; i++) cout << v[i] << " ";}제가 이 문제를 이렇게 풀었는데 이상하게 s값 (캐시 메모리의 크기) 가 10이 넘어가면 안되네요..ㅠㅠ 10보다 작으면 정상적으로 되는데.. 그래서 체점 해보면 1번2번은 맞는데 뒤에꺼는 틀리다고 하네요. 혹시 어떤게 문제인지 아시나요??..아무리 찾아도 못찾겠어요..ㅠㅠ