it 취업을 위한 알고리즘 입문 (with C++) : 창의적 문제해결

it 취업을 위한 알고리즘 입문 (with C++) : 창의적 문제해결

(9개의 수강평)

222명의 수강생
77,000원
지식공유자 · 김태원
100회 수업 · 총 19시간 10분 수업
평생 무제한 시청
수료증 발급 강좌
수강 난이도 '초급'
냉콩국수 프로필

scanf 입력을 받을 때 냉콩국수 17일 전

char a[20]에서 a가 이미 주소값을 나타내는데, scanf에서 a대신 &a를 써도 무방한건가요? 잘 작동하는 원리가 궁금합니다.

1
OMG 프로필

혹시 해당 강좌처럼 채점 시스템을 제공하는 강좌 추가 계설 계획이 있으신지요..?? OMG 24일 전

많이 도움되서 추가 강좌가 있으면 좋을 것 같습니다^^

2
cxviuhwe 프로필

나이차이 freopen cxviuhwe 1달 전

visual studio 에서 하고 있었는데 freopen을 사용하니 반환값이 무시되었다고 되네요...

3
김형준 프로필

컴퓨터 성능에 따라서 답이 맞는데도 타임리밋 뜨는 경우가 있나요?? 김형준 1달 전

토마토 문제 자꾸 4,5번이 타임리밋 뜨길래  제가 틀렸나 싶어서   답안 소스파일 복붙하고 시험해봤는데도

똑같이 4,5번만 타임리밋 뜨는데  제 컴퓨터가 성능이 안 좋아서 그런건가요?? ㅠㅠ 

1
우리 심바 c++ 마스터  프로필

교수님의 강의를 완강 후, 혼자 알고리즘 책을 통해서 독학하고 있는 학생입니다. 우리 심바 c++ 마스터 1달 전

안녕하세요! 저는 교수님의 강의를 완강하고, 알고리즘 책을 통해서 공부하고 있습니다.

제가 vector stl을 이해하기로는, vector<int> n[20] 이런 식으로 사용하는 것으로 알고 있는데요.

근데, 해당 책에서는 vector <int> thePouring( vector<int> capacitied, vector<int>bottle )이런 식으로

리스트의 크기를 적는 대신에, 벡터들을 괄호를 묶는 경우도 존재하더라구요.

제가 비 전공자라 어디 여쭤볼 곳도 없고, 여러 권의 책들을 찾아봐도 설명이 있지 않아서 이렇게 여쭤보게 되었습니다.

혹시, 실례가 되지 않는다면, 짧게라도 알려주실 수 있으신지요?

감사합니다.

5
skek2875 프로필

41번 연속된 자연수의 합 문제 질문 드립니다. skek2875 1달 전

선생님의 강의를 듣기 전에 직접 문제를 풀어보았는데 해설 강의를 듣고나서 고민이 생겨 질문드립니다.

우선 제가 풀이한 방식은 다음과 같습니다.

int main(){

//freopen("input.txt", "rt", stdin);

int n, i, j, end, sum = 0, cnt=0;

scanf("%d", &n);

if (n%2 == 0) end = n/2;

else end = (n/2)+1;

for (i = end; i >= 1; i--) {

sum += i;

if (sum == n) {

printf("%d ", i);

for (j = i+1; j <= end; j++)

printf("+ %d ", j);

printf("= %d\n", n);

sum -= end;

end--;

cnt++;

}

else if (sum > n) {

sum -= end;

end--;

}

}

printf("%d", cnt);

return 0;

}

입력받은 숫자 N부터 1씩 감소시키면서 sum에 누적하고 그 값이 처음의 N값과 동일하면 수식을 출력하는 방식으로 코드를 작성했습니다. 제공해주신 채점기를 돌려본 결과도 100점이 나왔구요.

그런데 강의를 들어보니, 저라면 몇 시간을 주어도 몰랐을 풀이법으로 문제를 해결하시더라구요. 강의 앞에서 말씀하셨다시피 지원자의 직감도 중요하게 보는 것 같은데 혹시 문제를 해결함에 있어서 이런 직감적인 부분을 얻으려면 어떻게 해야하는건가요? 문제를 풀면서 이런 방식을 발견할 때마다 외워야만 가능한 건가요? 아니면 문제를 풀다보면 자연스럽게 배워지는 부분인건가요?

1
Cherry Blossom with Sun 프로필

19번 분노유발자 질문입니다 Cherry Blossom with Sun 2달 전

저는 앞의 학생을 기준으로 뒤에 모든 학생을 검사해서

더 큰 학생이 있으면 세지 않는 방식으로 했는데 어디서 

잘못된 부분인지 모르겠어서 질문드립니다 ㅠㅠ 

간단한 개념이라 될 줄 알았는데 왜인지 이런 방식으로 답이 안나오네요 ㅠㅠ 

2
주태종 프로필

STL은 언제쯤??? 주태종 2달 전

아직 완강은 하지 않은 상태지만,

시험 준비하는 입장에서 너무 좋은 강좌입니다.

뭔가 하나씩 알아가고, 실력이 늘고 있다는 기분도 듭니다.

강의 중간 부쯔음 STL 강의도 찍으실 예정이라고 하셨는데,  C++ STL 알고리즘 강좌는 언제쯤 계획 중이신지 궁금합니다.

1
이창진 프로필

그냥 문자열을 크기대로 배열해서 이창진 2달 전

내림차순으로 정리한다음에 두 문장을 하나씩 비교해서 두 문자열에서 다른 부분이 나오면 틀리게 구현해봤습니다.

 

채점할때는 그냥 만점 나와서 넘기긴 했는데, 이런 식으로 얌체로 생각하면 실력이 안늘까요?? 

1
DH 프로필

86번 피자배달거리 DH 2달 전

안녕하세요, 선생님

항상 좋은 강의 감사합니다.

1) 86번 질문

다름이 아니라 86번 문제에서 아무리 보아도 ch의 역할이 이해가 안갑니다.

DFS 함수 내부에 2중 포문으로 들어간

for (int j = 0; j < m; j++) {

int x2 = pz[ch[j]].first;

int y2 = pz[ch[j]].second;

이 부분이 특히 이해가 안갑니다..

int x2 = pz[j].first;

int y2 = pz[j].second;

 

가 아니라 ch[j] 가 필요한 이유가 무엇이죠,,?

체크 배열인건 알겠는데 무엇을 체크하기 위한 것인지 모르겠습니다.

어떤 것을 가리키는 인덱스 번호인지도요 ㅠㅠ

 

2) 그 외

현재 완강을 달려갑니다.

그런데도 새로운 DFS/BFS문제 및 다른 문제를 만나면 아예 풀지를 못하고 있습니다.

취업대비 코딩테스트 준비중인데 어떻게 해야할지 감이 안섭니다..코딩테스트까지는 2달 남았습니다.

시간상 하루 2문제씩 해당 강의 문제를 복습하고, 나머지 1문제는 새로운 문제를 푸는식으로 하루 3문제 정도 풀려고 하는데 괜찮은 계획인지 여쭤봅니다.

2
blizzarduser 프로필

32번 선택정렬 질문입니다. blizzarduser 2달 전

//32번 

#include<stdio.h>

#include<vector>

#include<algorithm>

using namespace std;

 

int main()

{

int n;

int tmp;

scanf("%d",&n);

 

vector<int>a(n);

 

for(int i=0;i<n;i++) {

scanf("%d",&a[i]);

}

 

for(int i=0;i<n;i++) {

for(int j=i+1;j<n;j++) {

if(a[i]>a[j]) {

tmp=a[i];

a[i]=a[j];

a[j]=tmp;

}

}

}

 

for(int i=0;i<n;i++) {

printf("%d ",a[i]);

}

 

제가 이런식으로 짰는데요 정렬은 잘되지만

선생님과 코드가 달라서요

제가 짠것은 버블정렬인가요?

1
선캄 프로필

26번 마라톤 질문입니다. 선캄 3달 전

올려주신 소스코드를 그대로 빌드해서 채점기에 넣을경우 4,5번이 시간초과가 뜹니다. 2중포문이라 뜨는거같은데 채점기를 수정해야 할것같습니다.

 

- 디버그모드로 빌드를 해서 그런가봅니다. 릴리즈로 다시 빌드후 테스트하니까 통과하네요!

 

강의에서는 머지소트를 이용한 방법을 따로 올려주신다고 했는데 올라와있는게 있나요?

1
우리 심바 c++ 마스터  프로필

질문있습니다. 우리 심바 c++ 마스터 3달 전

bool operator<( Edge &b){

    return val > b.val;

}

이렇게 작성하면 priority_queue에서는 최소 힙으로 된다고 하셨는데요.

 

sort( ~.begin(), end())는 큰 순서대로 내림차순으로 배열되던데요. 

 

혹시, 이해하기 쉬운 방법이 있을까요?

제 기준에는 완전히 서로 반대로 정렬이 되어버리는 것 같습니다. 

 

항상 쉽게 설명해주셔서 감사드립니다! 

2
슘 프로필

41번 질문드립니다 3달 전

15 연속된 합 예를 들어주셨을때, 

7+8, 4+5+6 두가지 케이스에 대해선 설명해주셔서 이해를 했는데,

1+2+3+4+5 같은 케이스가 코드에서 어떻게 출력되는지 이해가 안가서 질문 드립니다!

 

위의 같은 경우 a가 (5-5)0이 되어서

while(a>0) 문 조차 들어가지 못하는데 어떻게 출력되는지 궁금합니다.

1
blizzarduser 프로필

19번 문제 질문입니다. blizzarduser 3달 전

#include <stdio.h>

 

int main()

{

int a[105]={0,};

int n,t,j;

 

int num;

int sum=0;

scanf("%d",&n);

 

for(int i=1;i<=n;++i) {

scanf("%d",&a[i]);

}

for(int i=1;a[i]!=0;++i) {

for(j=i+1;a[j]!=0;++j) {

if(a[i]<=a[j])

break;

if(a[j+1]==0) {

sum++;

}

}

}

printf("%d",sum);

}

선생님 19번문제를 이렇게 풀면 채점결과 통과는합니다.

하지만 시간을 효율적으로 더 줄이기위해서

a[i]가 a[j]보다 작아서 break 되는순간

a[i]를 ++i를 이용하지않고 바로 a[j]부터 시작해서

비교를 하려는 생각을 해봤습니다.

55 34 46 89가 있으면 55가 89에 걸리는순간

89부터 검사를 하려구요

그래서 이렇게 다시 짜봤습니다.

#include <stdio.h>

 

int main()

{

int a[105]={0,};

int n,t,j;

 

int num;

int sum=0;

scanf("%d",&n);

 

for(int i=1;i<=n;++i) {

scanf("%d",&a[i]);

}

for(int i=1;a[i]!=0;++i) {

for(j=i+1;a[j]!=0;++j) {

if(a[i]<=a[j]) {

                               i=j;

break;

                     }

if(a[j+1]==0) {

sum++;

}

}

}

printf("%d",sum);

}

i=j를 넣는방식으로 짰는데 이러면

어떤건 통과하고 어떤건 통과가안되더라구요

그 이유가 뭔가요??

2
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강좌들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스