메뉴 건너뛰기

컴퓨터공학부 박진우연구원의 홈페이지에 오신것을 환영합니다.

스터디 - 씨앗

스터디 - 씨앗

전체 50건
공지 커리큘럼 조준성2012.03.20

1주차

Printf

변수

Int

Double

Char

연산자

사칙 연산자

증감 연산자

나머지 연산자

Scanf

 

2주차

형변환 연산자

자리 수 출력

수학 관련 함수

Pow

Ceil

Floor

Sqrt

If

If, else if, else

관계 연산자

논리 연산자

조건 연산자

Switch

3주차

For

4주차

Array

5주차

함수

6주차

포인터

7주차

포인터

8주차

구조체

9주차

문자열

5월 1주차 알고리즘 Seth2013.05.22
프로그램 명: truck
제한시간: 1 초
제 1 지하차도 를 지나면 2 지하차도 를 지나면 3 지하차도로 이어져있다.

차의 높이가 168 인 경우 세 지하차도의 높이가 주어질 때 지하차도에 충돌하지 않고 건널수 있는지 ( NO CRASH ) 아니면 지하차도에 부딪히는지 ( CRASH X )를 알아내는 프로그램을 작성하는 것이 문제이다.

입력

지하차도의 높이가 입력으로 주어진다. 각 지하차도의 높이는 0 에서 300 이다.

출력

세 개의 지하차도를 무사히 빠져 나가면 "NO CRASH" 를 출력하고 아니면 "CRASH X" 를 출력한다.

즉 지하차도의 높이는 168 이하이면 부딪히고 , X 는 최초로 부딪히는 지하차도의 높이이다.

 #include <stdio.h>
int main(){
 int a,b,c;
 scanf("%d%d%d",&a,&b,&c);
 if(a<168) printf("CRASH %d",a);
 else if(b<168) printf("CRASH %d",b);
 else if(c<168) printf("CRASH %d",c);
 else printf("NO CRASH");
 return 0;
}
4월 3주차 알고리즘 Seth2013.05.22
 
프로그램 명: eboxes(open)
제한시간: 1 초

책상 위 1 번 박스가 N 개 놓여있다.( N 은 2 이상 )

책상 아래에는 2 번 박스 , 3 번 박스,...가 무한 개 있다.

1 번 박스가 가장 크고 , 다음은 2 번 박스 , 3 번 박스 ...

2 번 박스를 1 번 박스에 넣을 수 는 있지만 3 번 박스를 1 번 박스에 넣을 수는 없다. 즉 i 번 박스에는 i+1 번 박스 만을 넣을 수 있다.

다음 과정을 T 번 반복한다.

  • 몇 개의 1 번 상자마다 2 번 상자 K 개를 집어 넣는다.
  • 몇 개의 2 번 상자마다 3 번 상자 K 개를 집어 넣는다.
  • 몇 개의 3 번 상자마다 4 번 상자 K 개를 집어 넣는다.
  • ...

어떤 상자 안에 아무 것도 없으면 이 상자는 비어 있다고 한다. T번 과정을 반복 한 후 책상 위에는 F 개의 빈 상자가 있다.

다음 그림은 N = 2 , K = 2 , T = 2, F = 5 인 경우의 예이다.

문제는 정수 N, K, T, F 가 주어질 때 책상 위에 있는 총 상자 개수를 구하는 것이다.

입력

첫 줄에 네 개의 정수가 주어진다: N, K, T, F (1 < N , K , T, F < 1 000 000 이고 N < F)

출력

총 상자 개수를 출력한다.
#include <stdio.h>
int main()
{
 int n,k,t,f;
 scanf("%d%d%d%d",&n,&k,&t,&f);
 printf("%d",(f-n)/(k-1)+f);
 return 0;
}
4월 2주차 알고리즘 Seth2013.05.22
프로그램 명: ants
제한시간: 1 초

일련의 개미떼들이 길이가 L cm 인 수평 작대기를 걸어간다. 이 들은 각 초당 1 cm 의 속도로 걸어가고 있다.

개미떼들이 작대기의 끝지점에 도달 하면 그 들은 이 작대기에서 자유 낙하한다. 두 마리의 개미가 서로 만난다면 그들은 가는 방향을 바꾸어 반대 방향으로 걸어간다. 개미가 현재 있는 작대기의 위치를 알지만 우리는 개미가 걷는 방향을 알지는 못한다.

우리가 할 일은 모든 개미들이 작대기에서 자유낙하 할수 있는 최대 빠른 시간과 느린 시간을 구하는 것이다.

입력

첫 줄에는 두 개의 정수가 입력으로 주어진다. 첫 수는 작대기의 길이 이고 다른 하나는 개미의 수 n 이다. 다음 n 개의 수는 개미가 현재 위치하고 있는 위치이다.

입력의 모든 수는 1000000 이하의 정수이다.

출력

두 수를 출력한다. 첫 수는 제일 빠른 시간 , 가장 느린 시간이다.
 #include <stdio.h>
#include <stdlib.h>
int main()
{
 int a,b;
 int tmp=0;
 int cnt=0;
 scanf("%d%d",&a,&b);
 if(b<=1){
  scanf("%d",&tmp);
  if(tmp >= a/2) printf("%d %d",a-tmp,tmp);
  else printf("%d %d", tmp,a-tmp);
 }
 else{
  int tmp2=0;
  int tmp3=0;
  do{
   scanf("%d",&tmp);
   if(cnt==0) {
    tmp2=tmp;
    tmp3=tmp;
   }
   else{
    if(abs(a/2-tmp) >= abs(a/2-tmp2)){
     tmp2=tmp;
    }
    if(abs(a/2-tmp) <= abs(a/2-tmp3)){
     tmp3=tmp;
    }
   }
   cnt++;
  }while(cnt<b);
  if(tmp3 >= a/2) printf("%d ", a-tmp3);
  else printf("%d ", tmp3);
  if(tmp2 > a/2) {
   if(a%2==0)
    printf("%d",abs(a/2-tmp2)*2+(a-tmp2));
   else
    printf("%d",abs(a/2-tmp2)*2+(a-tmp2)-1);
  }
  else printf("%d",abs(a/2-tmp2)*2+tmp2);
 }
 return 0;
}
 
5월 3주차 씨앗 최동수2013.05.22
STL의 Vector를 이용한 풀이

프로그램 명: josephus
제한시간: 1 초

카메롯 성에서는 회의가 열리고 있다. 밤마다 용이 나타나서 백성들을 괴롭히기 때문 이다.

원탁의 기사 모두가 용과 싸우고 싶어 하지만 많은 군대를 이끌고 가 면 용이 미리 알아채기 때문에 기사 한 명만이 갈 수 있다. 아더왕은 과연 누구를 보내야 하는 가 고민에 빠졌다.

그러던 중 란슬러트가 묘안을 제시하였다.

  • 원탁에 둘러앉아 있는 기사 n 명에게 시계방향으로 차례대로 1 번부터 n 번의 번호를 부여한다.
  • 그 중 임의의 숫자 m 을 선택하여 그 번호의 기사를 제외 시킨다
  • 다음 그 기사로부터 시계 방향으로 k 번째 있는 기사를 선택하여 제외시킨다.
  • 이렇게 제외된 기사로부터 k 번째 있는 기사를 제외시키는 작업을 단 한 명이 남을 때까지 계속한 뒤 그 결과 마지막으로 남은 기사가 용과 싸우러 가는 것이다.

예를 들어 n=8, m=2, k=3 인 경우 2 가 먼저 제외된 후 이어 5 번 8 번 기사가 차례대로 제외된다.

원탁의 기사의 수, 처음 선택한 기사의 번호 , 다음으로 몇 번째 기사를 제외시킬 것인가 하는 가 주어질 때 제외되는 기사들의 번호를 순서대로 출력 한다.

입력 형식

n,m,k 가 차례대로 입력된다. n , m , k 은 2 이상 1000 이하인 정수이다.

출력 형식

제외되는 기사들의 번호를 제외되는 순서대로 출력한다. 마지막에 출력된 기사가 선택되는 것이다.

입출력 예

입력

8 2 3

출력

2 5 8 4 1 7 3 6

권장 사항

linked list 권장
 #include <iostream> #include <string> #include <vector> using namespace std; int main() { vector<int> vt; vector<int> ::iterator it; int n,m,k; int i,j; cin>>n>>m>>k; for(i = 1; i<= n ; i++){ vt.push_back(i); } m -=1; for(i = 0;!vt.empty();){ if(i == m){ cout<<vt[i]<<" "; vt.erase(vt.begin() + i, vt.begin()+i+1); if(vt.empty()) break; m += k-1; j = vt.size(); m %= j; } i++; if(i >= vt.size()) i = 0; } return 0; }

5월 4주차 씨앗 최동수2013.05.22
프로그램 명: long_sub
제한시간: 1 초

매우 큰 길이의 두 개의 수가 입력되었을때 뺄셈을 구하는 프로그램을 작성하시오.

예를 들어, 두 수가 218072345632843258023, 521732147023 일 때,

    218072345632843258023
  -          521732147023 
    ---------------------
  = 218072345111111111000
이 된다.

입력

100 자리 이하의 양의 정수 2 개가 주어진다.

출력

두 정수값에 대한 뺄셈의 결과를 출력한다.

입출력 예

입력

521732147023
218072345632843258023

출력

-218072345111111111000
출처:
채점 데이터:
참조 : http://211.228.163.31/30stair/linkedlist/linkedlist.php?pname=linkedlist
 
 #include <iostream> #include <string> using namespace std; class node { public : int data; node* n_link; node* p_link; }; int main() { node *p, *q, *p1,*p2, *pr; node *head_a, *head_b, *head_r; node *tail_a,*tail_b,*tail_r; int i,sign = 0, isZero = 1; string str_a; string str_b; string tmp; cin>>str_a>>str_b; if(str_a.size() > str_b.size()){ sign = 0; }else if(str_a.size() == str_b.size()){ if(str_a >= str_b){ sign = 0; }else{ sign = 1; tmp = str_a; str_a = str_b; str_b = tmp; } }else{ tmp = str_a; str_a = str_b; str_b = tmp; sign = 1; } head_a = new node[1]; tail_a = new node[1]; head_a->data = 0; head_a->p_link = '\0'; tail_a->n_link = '\0'; p = head_a; for(i = 0; i < str_a.size() ; i++){ q = new node[1]; q->data = str_a[i] - '0'; q->n_link = '\0'; q->p_link = p; p->n_link = q; tail_a->p_link = q; p = q; } head_b = new node[1]; tail_b = new node[1]; head_b->data = 0; head_b->p_link = '\0'; tail_b->n_link = '\0'; p = head_b; for(i = 0; i < str_b.size() ; i++){ q = new node[1]; q->data = str_b[i] - '0'; q->n_link = '\0'; q->p_link = p; p->n_link = q; tail_b->p_link = q; p = q; } p1 = tail_a->p_link; p2 = tail_b->p_link; head_r = new node[1]; tail_r = new node[1]; head_r->p_link = '\0'; tail_r->n_link = '\0'; p = tail_r; while (1){ q = new node[1]; if(p1->data >= p2->data) q->data = p1->data - p2->data; else{ if(p1->p_link != '\0'){ q->data = 10 + p1->data - p2->data; p1->p_link->data -= 1; //cout<<"zzz"<<endl; }else{ q->data = p1->data - p2->data; } } if(p1 == head_a && p2 == head_b) break; q->n_link = p; q->p_link = '\0'; p->p_link = q; head_r->n_link = q; p = q; if(p1->p_link != '\0') p1 = p1->p_link; if(p2->p_link != '\0') p2 = p2->p_link; } p=head_r->n_link; if(p->data != 0) isZero = 0; if(sign) cout<<"-"; while ( p->n_link != NULL ){ if(p->data != 0) isZero = 0; if(!isZero) printf("%d",p->data); p=p->n_link; } if(isZero) cout<<0; printf("\n"); }


4주차 강의자료입니다. 관대하2013.04.11

연산자(비트 논리 연산)


부터 반복문까지입니다.


차주에는 중간고사 대비 리뷰 한번 하고, 기출문제를 한번 풀어보고자 합니다.

2주차 강의자료입니다. 최동수2013.04.04
1주차 C++ 강의자료입니다. 최동수2013.03.27

1. C++?

 

2. C++의 입출력

 

3. 함수오버로딩

 

4. 레퍼런스

 

5. 구조체

 

6. 클래스

1주차 강의자료입니다. 최동수2013.03.26

1. 변수/상수

 

2. 자료유형

 

3. 오버플로우

 

4. printf / scanf

 

5. 연산자

 

6. 조건문(if)

1주차 강의 조준성2012.03.20

-사각형 넓이 구하기/area
#include <stdio.h>
  
int main()
{
    int a, b;
  
    scanf("%d %d", &a, &b);
    printf("%d", a*b);
  
    return 0;
}
 
-버터 먹기/butter
#include<stdio.h>
  
int main()
{
    int n,m;
    
    scanf("%d %d", &n, &m);
    printf("%d", n);
  
    return 0;
}
 

-분을 초로 변환/m2s

#include <stdio.h>
int main()
{
    int min;
  
    scanf("%d", &min);
    printf("%d minutes is %d seconds.",min,min*60);
  
    return 0;
}
 
-두수의 교환/swap

#include <stdio.h>
 
int main()
{
    int n,m,t;
 
    scanf("%d %d", &n, &m);
    t=n;
    n=m;
    m=t;
    printf("%d %d", n, m);
 
    return 0;
}

위로