//--------------------------------------------------------------------------------
//SASAOJ-A_[함수+포인터] swap 함수 만들기
#include <stdio.h>

//
void myswap(int *a, int *b) {
    if(*a<*b) return;
    int tmp=*a;
    *a=*b;
    *b=tmp;
}
//

int main(void)
{
    int a, b;
    scanf("%d%d", &a, &b);
    myswap(&a, &b);
    printf("%d %d", a, b);
}
//--------------------------------------------------------------------------------
//SASAOJ-B_[함수+포인터] 매개변수와 포인터1
#include<stdio.h>

//
void f(int a, int b, int *c, int *d) {
    *c=a+b;
    *d=a-b;
}
//

int main() {
    int a,b,c,d;
    scanf("%d %d",&a,&b);
    f(a,b,&c,&d);
    printf("%d + %d = %d\n",a,b,c);
    printf("%d - %d = %d\n",a,b,d);
    return 0;
}
//--------------------------------------------------------------------------------
//SASAOJ-C_[함수+포인터] 배열과 포인터1
#include <stdio.h>

//
int f(int *arr, int cnt) {
    int res=-100;
    for(int i=0; i<cnt; i++) {
        res=res>arr[i]?res:arr[i];
    }
    return res;
}
//

int main() {
   int a[10];
   for(int i=0;i<10;i++)
      scanf("%d",a+i);
   printf("%d\n",f(a, 10));
   return 0;
}
//--------------------------------------------------------------------------------
//SASAOJ-D_(포인터) 거꾸로 출력하기
#include <stdio.h>
#include <stdlib.h>
int main() {
    int n;
    scanf("%d", &n);

    int *arr=(int *)malloc(sizeof(int)*(n+10));
    for(int i=0; i<n; i++) scanf("%d", arr+i);
    for(int i=n-1; i>=0; i--) printf("%d ", *(arr+i));
}
//--------------------------------------------------------------------------------
//SASAOJ-E_(포인터) 부분 문자열
#include <stdio.h>
#include <stdlib.h>

int main() {
    char *s=(char *)malloc(sizeof(char)*110);
    int a, b;
    scanf("%s", s);
    scanf("%d %d", &a, &b);
    for(int i=a-1; i<b; i++) printf("%c", *(s+i));
}
//--------------------------------------------------------------------------------
//SASAOJ-F_두 점 간의 거리
#include <stdio.h>
#include <math.h>

double dist(int dx, int dy) {
    return sqrt(dx*dx+dy*dy);
}

int main() {
    int x[2], y[2];
    for(int i=0; i<2; i++) scanf("%d %d", &x[i], &y[i]);

    printf("%.2lf", dist(x[0]-x[1], y[0]-y[1]));
}
//--------------------------------------------------------------------------------
//SASAOJ-G_여러 점 간의 거리
#include <stdio.h>
#include <math.h>

double dist(int dx, int dy) {
    return sqrt(dx*dx+dy*dy);
}

int main() {
    int n, x, y;
    double res=0;
    scanf("%d", &n);
    scanf("%d %d", &x, &y);

    for(int i=0; i<n-1; i++) {
        int nx, ny;
        scanf("%d %d", &nx, &ny);
        res+=dist(x-nx, y-ny);
        x=nx, y=ny;
    }
    printf("%.2lf", res);
}
//--------------------------------------------------------------------------------
//SASAOJ-H_광역시
#include <stdio.h>
#include <math.h>
#include <algorithm>

struct City { long long p, dist; };
City A[10010];

bool cmp(City A, City B) {
    if(A.dist!=B.dist) return A.dist<B.dist;
    return A.p>B.p;
}

int main() {
    int n;
    long long p;

    scanf("%d %lld", &n, &p);

    for(int i=0; i<n; i++) {
        int x, y;
        scanf("%d %d %lld", &x, &y, &A[i].p);
        A[i].dist=x*x+y*y;
    }
    std::sort(A, A+n, cmp);

    for(int i=0; i<n; i++) {
        p+=A[i].p;
        if(p>=1000000) {
            printf("%.3lf", sqrt(A[i].dist));
            return 0;
        }
    }
    printf("-1");
}
//--------------------------------------------------------------------------------
//SASAOJ-I_(함수) 키가 더 큰 학생은?
#include<stdio.h>
struct Student {
  int no;
  char name[10];
  int height;
};

//
void swap(Student *A, Student *B) {
    if(A->height>B->height) return;
    Student tmp=*A;
    *A=*B;
    *B=tmp;
}
//

int main() {
  struct Student a,b;
  scanf("%d %s %d",&a.no, a.name, &a.height);
  scanf("%d %s %d",&b.no, b.name, &b.height);
  swap(&a,&b);
  printf("%d %s %d",a.no, a.name, a.height);
}
//--------------------------------------------------------------------------------
//SASAOJ-J_(함수) 2차 방정식을 풀어보자.
#include<stdio.h>
#include<math.h>
struct X { double a,b; };

//
X solve(int a, int b, int c) {
    X A;
    if(a<0) {
        A.a=(-b+sqrt(b*b-4*a*c))/(2*a);
        A.b=(-b-sqrt(b*b-4*a*c))/(2*a);
    }
    else {
        A.a=(-b-sqrt(b*b-4*a*c))/(2*a);
        A.b=(-b+sqrt(b*b-4*a*c))/(2*a);
    }
    return A;
}
//

int main() {
    struct X s;
    int a,b,c;
    scanf("%d %d %d",&a, &b, &c);
    s=solve(a,b,c);
    if(s.a==s.b) printf("%.2lf",s.a);
    else printf("%.2lf %.2lf",s.a, s.b);
}
//--------------------------------------------------------------------------------
//SASAOJ-K_(구조체) 안전한 배열 만들기
#include<stdio.h>

struct Array {
  private:
    int a[5],size=5;
  public:
    void printArray();
    void setValue(int, int);
};

//
void Array::setValue(int idx, int val) {
    if(idx<0||idx>=size) return;
    a[idx]=val;
}
void Array::printArray() {
    for(int i=0; i<size; i++) printf("%d ", a[i]);
}
//

int main() {
  Array a;
  int idx,v;
  for(int i=0;i<10;i++) {
    scanf("%d%d",&idx,&v);
    a.setValue(idx,v);
  }
  a.printArray();
}
//--------------------------------------------------------------------------------
//SASAOJ-L_(구조체) 포함된 문제 세기
#include<stdio.h>
#include<string.h>

struct MyString {
  private:
    char s[100];
  public:
    void setString(char *p);
    int countChar(char c);
};
void MyString::setString(char *p) {
  strcpy(s,p);
}
int MyString::countChar(char c) {
  int cc=0;
  for(int i=0;s[i];i++)
    if(s[i]==c) cc++;
  return cc;
}

//
int main() {
    MyString ms;
    char a, b, c, s[100]={};
    int res=0;

    scanf("%s", s);
    ms.setString(s);
    scanf(" %c %c %c", &a, &b, &c);
    res=ms.countChar(a)+ms.countChar(b)+ms.countChar(c);

    printf("%d", res);
}
//
//--------------------------------------------------------------------------------
//SASAOJ-M_(구조체) 문자열 분류하기
#include<stdio.h>
#include<string.h>

struct MyString {
  private:
    char s[100];
  public:
    void setString(char *p);
    int countCap();  //대문자 count
    int countSmall();  //소문자 count
    int countNum();  // 숫자 count
};

//
void MyString::setString(char *p) {
    strcpy(s, p);
}
int MyString::countCap() {
    int cnt=0;
    for(int i=0; s[i]; i++) {
        if('A'<=s[i]&&s[i]<='Z') cnt++;
    }
    return cnt;
}
int MyString::countSmall() {
    int cnt=0;
    for(int i=0; s[i]; i++) {
        if('a'<=s[i]&&s[i]<='z') cnt++;
    }
    return cnt;
}
int MyString::countNum() {
    int cnt=0;
    for(int i=0; s[i]; i++) {
        if('0'<=s[i]&&s[i]<='9') cnt++;
    }
    return cnt;
}
//

int main() {
  MyString ms;
  char s[100];
  scanf("%s",s);
  ms.setString(s);
  printf("%d %d %d",ms.countNum(),ms.countCap(),ms.countSmall());
}
//--------------------------------------------------------------------------------
//SASAOJ-N (리스트) 카드 나열하기 1
#include<stdio.h>
struct Card { char k; int v; };
class Clist {
  private:
    Card clist[11];
    int size=0;
  public:
    void insertCard(int idx, Card data);
    void printList();
};

//
void Clist::insertCard(int idx, Card data) {
    if(idx<=0||idx>size+1||size>=10) return;
    for(int i=size; i>=idx; i--) {
        clist[i+1]=clist[i];
    }
    clist[idx]=data;
    size++;
}
void Clist::printList() {
    for(int i=1; i<=size; i++) printf("%c%d ", clist[i].k, clist[i].v);
}
//

int main() {
  Card c;
  Clist list;
  int idx;
  for(int i=0;i<10;i++) {
    scanf(" %c %d %d", &c.k, &c.v, &idx);
    list.insertCard(idx, c);
  }
  list.printList();
}
//--------------------------------------------------------------------------------
//SASAOJ-O_(리스트) 정올 참여학생 리스트 만들기 1
#include <stdio.h>
struct Card { int num; char s[15]={}; };
struct MyList {
  private :
    Card My[110];
    int size=0;
  public :
    void insertCard(Card data);
    void deleteCard(int num);
    void printCard(int idx);
};

void MyList::insertCard(Card data) {
    My[0]={0, 0};

    int i;
    for(i=1; i<=size && My[i].num<data.num; i++);

    if(i<=size && My[i].num==data.num) return; // 범위 체크 주의! 안 그러면 쓰레기값과 비교하게 될 수도..
    for(int j=size; j>=i; j--) {
        My[j+1]=My[j];
    }
    My[i]=data;
    size++;
}
void MyList::deleteCard(int num) {
    int i;
    for(i=1; i<=size && My[i].num<num; i++);

    if(i<=size && My[i].num==num) {
        for(int j=i; j<size; j++)
            My[j]=My[j+1];

        size--;
    }
}
void MyList::printCard(int idx) {
    if(idx<=0||idx>size) return;
    printf("%d %s\n", My[idx].num, My[idx].s);
}
int main() {
    int n;
    char c;
    Card D;
    MyList ml;
    scanf("%d", &n);

    for(int i=0; i<n; i++) {
        scanf(" %c %d %s", &c, &D.num, D.s);
        if(c=='I') ml.insertCard(D);
        if(c=='D') ml.deleteCard(D.num);
    }
    for(int i=0; i<5; i++) {
        int a;
        scanf("%d", &a);
        ml.printCard(a);
    }
}
//--------------------------------------------------------------------------------
//SASAOJ-P_(리스트) 카드 나열하기 2
#include<stdio.h>
#include<stdlib.h>
struct Card { char k; int v; Card *next;};
class Clist {
  private:
    Card *head=NULL; int size=0;
  public:
    void insertCard(int idx, Card data);
    void printList();
};

//
void Clist::insertCard(int idx, Card data) {
    if(idx<=0||idx>size+1) return;
    Card *p=NULL, *t=head;
    Card *n=(Card*)malloc(sizeof(Card));
    *n=data;

    for(int i=1;t!=NULL&&i<idx;i++,p=t,t=t->next);
    n->next=t;

    if(p) // head -> ... -> p -> n -> t
        p->next=n;
    else
        head=n;
    size++;
}
void Clist::printList() {
    Card *t=head;
    for(;t!=NULL;t=t->next) {
        printf("%c%d ", t->k, t->v);
    }
}
//

int main() {
  Card c;
  Clist list;
  int idx;
  for(int i=0;i<10;i++) {
    scanf(" %c %d %d",&c.k, &c.v, &idx);
    list.insertCard(idx, c);
  }
  list.printList();
}
//--------------------------------------------------------------------------------
//SASAOJ-Q_(리스트) 카트 나열하기 3
#include<stdio.h>
#include<stdlib.h>
struct Card { char k; int v; Card *next;};
class Clist {
  private:
    Card *head=NULL; int size=0;
  public:
    void insertCard(int idx, Card data);
    void reverse();
    void printList();
};

//
void Clist::insertCard(int idx, Card data) {
    if(idx<=0||idx>size+1) return;
    Card *p=NULL, *t=head;
    Card *n=(Card *)malloc(sizeof(Card));
    *n=data;

    for(int i=1;i<idx;i++,p=t,t=t->next);
    n->next=t;

    if(p)
        p->next=n;
    else
        head=n;
    size++;
}
void Clist::reverse() {
    Card *p=NULL, *t=head;
    while(head) {
        head=head->next;
        t->next=p;
        p=t;
        t=head;
    }
    head=p;
}
void Clist::printList() {
    Card *t=head;
    for(;t!=NULL;t=t->next) {
        printf("%c%d ", t->k, t->v);
    }
}
//

int main() {
  Card c;
  Clist list;
  int idx,n,k;
  scanf("%d%d",&n,&k);
  for(int i=1;i<=n;i++) {
    scanf(" %c %d %d",&c.k, &c.v, &idx);
    if(i%k) list.insertCard(idx, c);
    else list.reverse();
  }
  list.printList();
}
//--------------------------------------------------------------------------------
//SASAOJ-R_(리스트) 희소 다항식의 덧셈
#include <stdio.h>
#include <stdlib.h>
struct Term { int coe, exp; Term *next; };
struct Poly {
  private:
    Term *head=NULL;
  public:
    void insertTerm(Term X);
    void printPoly();
};

void Poly::insertTerm(Term X) {
    Term *p=NULL, *t=head;
    for(;t!=NULL&&t->exp>X.exp;p=t,t=t->next);
    if(t&&t->exp==X.exp) {
        t->coe+=X.coe;
        return;
    }

    Term *n=(Term *)malloc(sizeof(Term));
    *n=X;
    n->next=t;

    if(p)
        p->next=n;
    else
        head=n;
}
void Poly::printPoly() {
    Term *t=head;
    while(t) {
        if(t->coe) { // 계수가 0이 아님
            printf("%d", t->coe);
            if(t->exp) { // 차수 1 이상
                printf("x");
                if(t->exp>1) printf("^%d", t->exp);
            }
        }
        t=t->next;
        if(t!=NULL) {
            if(t->coe>0)
                printf("+");
        }
    }
}

int main() {
    int n;
    Term X;
    Poly poly;
    scanf("%d", &n);

    for(int i=0; i<n; i++) {
        int k;
        scanf("%d", &k);

        for(int j=0; j<k; j++) {
            scanf("%d %d", &X.coe, &X.exp);
            poly.insertTerm(X);
        }
    }
    poly.printPoly();
}
//--------------------------------------------------------------------------------
//SASAOJ-S_(리스트)전치행렬 만들기
#include <stdio.h>
#include <stdlib.h>
struct Node { int x, y, val; Node *next; };
struct matrix {
  private:
    Node *head;
    int row=0, col=0;
  public:
    void setRowCol(int Row, int Col) { row=Row, col=Col; };
    void insertNode(Node X);
    void printMat();
};

void matrix::insertNode(Node X) {
    Node *p=NULL, *t=head;
    Node *n=(Node*)malloc(sizeof(Node));
    *n=X;

    for(;t && t->x<=X.x && t->y<=X.y;p=t, t=t->next);
    n->next=t;

    if(p)
        p->next=n;
    else
        head=n;
}
void matrix::printMat() {
    Node *t=head;
    for(int i=0; i<row; i++) {
        for(int j=0; j<col; j++) {
            if(t&&t->x==i&&t->y==j) {
                printf("%d ", t->val);
                t=t->next;
            }
            else printf("0 ");
        }
        puts("");
    }
}

int main() {
    int n, m;
    matrix mt;
    scanf("%d %d", &n, &m);
    mt.setRowCol(m, n);

    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            int a;
            scanf("%d", &a);

            if(a)
                mt.insertNode({j, i, a});
        }
    }
    mt.printMat();
}
//--------------------------------------------------------------------------------
//SASAOJ-T_(Stack) 컵 쌓기 1
#include<stdio.h>
#include<stdlib.h>

struct ArrayStack {
  private:
    int size,top,cnt; //배열크기,top의 위치,아이템개수
    int * s;
  public:
    void createAS(int n); // 항목수가 최대 n개인 ArrayStack 생성하기
    void push(int d); // int d를 넣기
    int pop();  // 최상위 int 꺼내기
    bool isEmpty(); // 빈 스택 판별
};

//
void ArrayStack::createAS(int n) {
    s=(int *)malloc(sizeof(int)*(n+10));

    if(s) {
        top=cnt=0;
        size=n;
    }
}
void ArrayStack::push(int d) {
    if(cnt==size) return;

    s[top++]=d;
    cnt++;
}
int ArrayStack::pop() {
    if(top==0) return 0;

    cnt--;
    return s[--top];
}
bool ArrayStack::isEmpty() {
    return !cnt;
}
//

int main() {
  int n,k,a,b,c;
  ArrayStack s[3];
  scanf("%d%d",&n,&k);
  for(int i=0;i<3;i++) s[i].createAS(n);
  for(int i=1;i<=n;i++)
    s[0].push(i);
  for(int i=0;i<k;i++) {
    scanf("%d%d",&a,&b);
    c=s[a].pop();
    if(c) s[b].push(c);
  }
  for(int i=2;i>=0;i--)
    while(!s[i].isEmpty())
      printf("%d ",s[i].pop());
  return 0;
}
//--------------------------------------------------------------------------------
//SASAOJ-U_(Stack) 컵 쌓기 2
#include<stdio.h>
#include<stdlib.h>
struct Node { int no; Node *next; };
struct LinkedListStack {
  private:
    int cnt=0;
    Node *top=NULL;
  public:
    void push(int d);
    int pop();
    bool isEmpty();
};

//
void LinkedListStack::push(int d) {
    Node *n=(Node *)malloc(sizeof(Node));
    n->no=d;

    n->next=top;
    top=n;
    cnt++;
}
int LinkedListStack::pop() {
    if(cnt==0) return 0;

    Node *t=top;
    int data=top->no;

    top=top->next;
    free(t);
    cnt--;

    return data;
}
bool LinkedListStack::isEmpty() {
    return !cnt;
}
//

int main() {
  int n,k,a,b,c;
  LinkedListStack s[3];
  scanf("%d%d",&n,&k);
  for(int i=1;i<=n;i++)
    s[0].push(i);
  for(int i=0;i<k;i++) {
    scanf("%d%d",&a,&b);
    c=s[a].pop();
    if(c) s[b].push(c);
  }
  for(int i=2;i>=0;i--)
    while(!s[i].isEmpty())
      printf("%d ",s[i].pop());
  return 0;
}
//--------------------------------------------------------------------------------

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: