Programming/C

[백준] 단계별로 풀어보기 > 기본 수학1 (C언어)

코딩뽀시래기 2021. 8. 22. 23:30
728x90

+) 풀이 코드

https://github.com/jung0115/CodingTestPractice.git

 

GitHub - jung0115/CodingTestPractice: Practice Coding Test with Beakjoon, programmers, etc.

Practice Coding Test with Beakjoon, programmers, etc. - GitHub - jung0115/CodingTestPractice: Practice Coding Test with Beakjoon, programmers, etc.

github.com

 

1712번 - 2021.08.22.일

#include <stdio.h>

int main(void){
  int A, B, C, result;

  scanf("%d %d %d", &A, &B, &C);

  if( (B>C) || (A!=0 && B==C) ) //손익분기점이 존재하지 않는 경우
    printf("-1");
  else{
    result=A/(C-B);
    printf("%d", result+1);
  }

  return 0;
}

 

2292번 - 2021.08.22.일

#include <stdio.h>

int main(void){
  int N, sum=1,cnt=1;

  scanf("%d", &N);

  while(sum<N){
    sum=sum+cnt*6;
    cnt++;
  }

  printf("%d", cnt);

  return 0;
}

 

1193번 - 2021.08.22.일

#include <stdio.h>

int main(void){
  int X, up, down, sum=0, check=1;

  scanf("%d", &X);

  while(sum<X){
    sum+=check;
    check++;
  }
  check--;
  sum-=check;

  if((check%2)==0){
    up=X-sum;
    down=check-up+1;
  }
  else{
    down=X-sum;
    up=check-down+1;
  }

  printf("%d/%d", up, down);

  return 0;
}

 

2869번 - 2021.08.25.수

#include <stdio.h>

int main(void){
  int A, B, V, result, remain;

  scanf("%d %d %d", &A, &B, &V);

  result=(V-A)/(A-B);
  remain=(V-A)%(A-B);
  result++;

  if(remain>0)
    result++;
  
  printf("%d", result);

  return 0;
}

 

10250번 - 2021.08.25.수

#include <stdio.h>

int main(void){
  int T, H, W, N, i, up, down, result;

  scanf("%d", &T);

  for(i=0; i<T; i++){
    scanf("%d %d %d", &H, &W, &N);
    down=(N/H)+1;
    up=(N%H);
    if(up==0){
      down--;
      up=H;
    }
    result=(up*100)+down;
    printf("%d\n", result);
  }

  return 0;
}

 

2775번 - 2021.08.25.수

#include <stdio.h>

int main(void){
  int T, k, n, i, j, people[15][14];

  for(i=0; i<15; i++){
    people[0][i]=i+1;
  }
  for(i=1; i<15; i++){
    people[i][0]=1;
    for(j=1; j<14; j++){
      people[i][j]=people[i][j-1]+people[i-1][j];
    }
  }

  scanf("%d", &T);
  for(i=0; i<T; i++){
    scanf("%d %d", &k, &n);
    printf("%d\n", people[k][n-1]);
  }

  return 0;
}

 

2839번 - 2021.08.26.목

#include <stdio.h>

int main(void){
  int N, five, three, remain;

  scanf("%d", &N);

  five=N/5;
  remain=N%5;
  three=remain/3;
  remain=remain%3;

  if(remain==0)
    printf("%d", five+three);
  else if(remain==1&&N>=6){
    five--;
    three+=2;
    printf("%d", five+three);
  }
  else if(remain==2&&N>=12){
    five-=2;
    three+=4;
    printf("%d", five+three);
  }
  else
    printf("-1");

  return 0;
}

10757번 - 2021.08.26.목 (틀린 답)

#include <stdio.h>

int main(void){
  unsigned long long A, B, sum;

  scanf("%llu %llu", &A, &B);
  sum=A+B;
  printf("%llu", sum);

  return 0;
}

: 큰 정수의 합을 구하는 문제라서 unsigned long long을 사용하면 해당 범위까지 커버가 가능할 거라고 생각했다. 문제에 제시된 샘플값은 제대로 계산했지만 채점해보니 틀렸다고 나왔다.

 

10757번 - 2021.08.26.목 (맞는 답)

#include <stdio.h>
#include <string.h>

void change(char *num, int len); //문자열을 역순으로 재정렬
int main(void){
  char A[10002]={0}, B[10002]={0};
  int sum[10003]={0};
  int i, lenA, lenB, len;

  scanf("%s %s", A, B);

  lenA=strlen(A);
  change(A, lenA);
  lenB=strlen(B);
  change(B, lenB);
  
  for(i=0; i<lenA || i<lenB; i++){
    if(A[i]=='\0')
      A[i]='0';
    if(B[i]=='\0')
      B[i]='0';
    
    sum[i]+=(A[i]-'0')+(B[i]-'0');
    if(sum[i]>=10){
      sum[i+1]+=1;
      sum[i]-=10;
    }
  }
  if(sum[i]==0)
    i--;

  for(; i>=0; i--)
    printf("%d", sum[i]);

  return 0;
}
void change(char *num, int len){
  int i, temp;
  for(i=0; i<len/2; i++){
    temp=num[i];
    num[i]=num[len-i-1];
    num[len-i-1]=temp;
  }
}

: 큰 정수를 문자열로 입력 받아서 계산했다. 그리고 문자열이 입력되면 마지막 문자의 다음 인덱스값만 '\0'로 채워지는 줄 알았는데 그게 아니라 문자가 입력되어 있지 않은 인덱스는 전부 '\0'로 채워져있는듯 했다.

 

1011번 - 2021.08.26.목

#include <stdio.h>
#include <math.h>

int main(void){
  int T, i;
  long long x, y, num, lenth;

  scanf("%d", &T);

  for(i=0; i<T; i++){
    scanf("%lld %lld", &x, &y);
    lenth=y-x;
    num=(int)sqrt(lenth);

    if(lenth==num*num)
      printf("%lld\n", (2*num)-1);
    else if((num*num)<lenth && lenth<=(num*num)+num)
      printf("%lld\n", 2*num);
    else
      printf("%lld\n", (2*num)+1);
  }

  return 0;
}

: 풀이 방법이 생각 안 나서 검색을 했다...

 

728x90