반응형

문제 출처

https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

 

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다

 

 

문제 이해하기

수에 한자리 한자리 수를 변수에 담아 출력하면된다.

 

문자배열로 받아 그냥 값을 더해서 출력하면 값이 틀린데 그 이유가 문자 1을 그냥 10진수로 출력하면 49가 나오기 때문이다. 그래서 나는 그문자 아스키값을 참고해서 문자 숫자에다가 48빼면 내가 의도한 값을 뽑아 낼수 있다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int i,k,hap=0;
    char str[100];
    scanf("%d",&k);
    scanf("%s",&str);
    for(i=0;i<k;i++){
        hap = hap + (str[i]-48);
    }
    printf("%d",hap);
    return 0;
}
반응형
반응형

문제출처

 

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

 

 

문제 번호 : 2438

 

2438 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a,i,j;
    scanf("%d",&a);
    for(i=1;i<=a;i++){
        for(j=0;j<i;j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

 

 

 

 

 

 

 

문제 번호 : 2439

 

 

2439 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a,i,j;
    scanf("%d",&a);
    for(i=1;i<=a;i++){
        for(j=0;j<a;j++){
            if(a-i<=j)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}

 

 

 

 

 

 

 

문제 번호 : 2440

 

 

2440 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a,i,j;
    scanf("%d",&a);
    for(i=0;i<a;i++){
        for(j=0;j<a-i;j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

 

 

 

 

 

 

 

문제 번호 : 2441

 

 

2441 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a,i,j;
    scanf("%d",&a);
    for(i=0;i<a;i++){
        for(j=0;j<a;j++){
            if(j<i)
                printf(" ");
            else
                printf("*");
        }
        printf("\n");
    }
    return 0;
}

 

반응형
반응형

 

문제출처

 

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수

www.acmicpc.net

 

 

 

 

 

문제 이해하기

 

5킬로그램 봉지로 먼저 담아야 더 적은 개수의 봉지를 배달할수 있기 때문에 조건을 5로 먼저두고 남은걸 3으로 그렇게 정확하게 만들 수 없으면 -1로 출력하면된다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a,cnt=0;
    scanf("%d",&a);
    while(a>0){
        if(a%5==0){
            a=a-5;
            cnt++;
        }
        else if(a%3==0){
            a-=3;
            cnt++;
        }
        else if(a>5){
            a=a-5;
            cnt++;
        }else{
            cnt = -1;
            break;
        }
    }
    printf("%d",cnt);
    return 0;
반응형
반응형

 

문제 출처

https://www.acmicpc.net/step/1

 

입/출력 받아보기 단계

자신이 acmicpc.net에서 푼 문제의 수와 acmicpc.net 아이디를 출력하는 문제

www.acmicpc.net

1단계 입/출력 받아보기

 

 

문제 번호 : 2557

제목 : Hello Word

 

1
2
3
4
5
6
#include <stdio.h>
 
int main(int argc, char *argv[]) {
        printf("Hello World!");
    return 0;    
}

 

문제 번호 : 1000

제목 : A+B

 

1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d",a+b);
    return 0;    
}

 

문제 번호 : 1001

제목 : A-B

 

1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d",a-b);
    return 0;    

 

문제 번호 : 7287

제목 : 등록

 

이문제는 백준 홈페이지에 우측위 자기 아이디 클릭후 푼문제 수와 아이디를 출력하면됩니다. 

 

1
2
3
4
5
6
7
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    printf("문제푼 수\n");
    printf("아이디");
    return 0;    

 

문제 번호 : 10172

제목 :

 

1
2
3
4
5
6
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    printf("|\\_/|\n|q p|   /}\n( 0 )\"\"\"\\\n|\"^\"`    |\n||_/=\\\\__|\n");
    return 0;    
}

핵심은 역슬래쉬나 쌍따움표를 출력하고 싶으면 \\, \" 와같이 사용하면 된다.

 

문제 번호 : 10718

제목 : We love kriii

 

1
2
3
4
5
6
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    printf("강한친구 대한육군\n강한친구 대한육군");
    return 0;    
}

 

문제 번호 : 11718, 11719

제목 : 그대로 출력하기, 2

 

1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main(int argc, char *argv[]) {
    char s;
    while(scanf("%c",&s)==1)
        printf("%c",s);
    return 0;    
}

 

반응형
반응형

문제 출처

 

https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

 

 

 

문제 이해하기

 

재귀함수와 피보나치 수열을 이해하며 0과 1이 몇번 출력되는지 횟수를 구하면된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h>
 
int zero,one;
 
int fibonacci(int n) {
    if(n==0) {
        zero++;
        return 0;
    } else if (n == 1) {
        one++;
        return 1;
    } else
        return fibonacci(n-1+ fibonacci(n-2);
}
 
int main(int argc, char *argv[]) {
 
    int cnt, n;
    scanf("%d",&cnt);
 
    for(; cnt>0; cnt--) {
        zero = 0;
        one = 0;
        scanf("%d",&n);
        fibonacci(n);
        printf("%d %d\n",zero,one);
    }
 
    return 0;
}

 

실제 문제의 핵심내용이 다있지만 문제는 실행 시간이였다.

재귀함수 특성상 값이 크면 함수도 그만큼 많이 불러와야 하기 때문에 실행시간도 길어지는 건 당연한 결과였다.

 

해결 방법은 계산된 값을 또 계산하지 않게 해주면 되는것이다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdlib.h>
 
int fibo [41]= {1,1,};
int fibonacci(int n) {
    if(n<=1)
        return 1;
    else if(fibo[n]>0)
        return fibo[n];
    return fibo[n] = fibonacci(n-1+ fibonacci(n-2);
}
int main(int argc, char *argv[]) {
 
    int cnt, n;
    scanf("%d",&cnt);
 
    for(; cnt>0; cnt--) {
        scanf("%d",&n);
        if(n ==0)
            printf("1 0\n");
        else if(n==1)
            printf("0 1\n");
        else {
            fibonacci(n);
            printf("%d %d\n",fibo[n-2],fibo[n-1]);
        }
    }
    return 0;
}

 

 

 

반응형
반응형

문제 출처

 

https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

 

 

 

문제 이해하기

 

두 좌표 (x1,y1) 지점에 반지름 r1인 원 하나와 (x2,y2) 지점에 반지름 r2인 원 하나가 교차하는 개수를 찾는 것이 핵심이다.

 

 

두 원의 위치관계

 

 

문제 조건

 

1. 조건 (x1,y1)와 (x2,y2)가 같다

   1-1  r1,r2가 같으면 (-1) 출력

   1-2  r1,r2가 다르면 (0) 출력

 

2. 1의 조건이 틀릴때

   2-1 (r1+r2) > i > |(r1-r2)|  교차점이 2개

   2-2 (r1+r2) == i  교차점이 1개

   2-3 (r1+r2) < i  교차점이 0개

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main(int argc, char *argv[]) {
    
    int x1,x2,y1,y2,r1,r2,cnt,loop;
    
        scanf("%d",&cnt);
    
    for(loop=0;loop<cnt;loop++){
        scanf("%d %d %d %d %d %d",&x1,&y1,&r1,&x2,&y2,&r2);        
        double i = sqrt(pow(x1-x2,2)+pow(y1-y2,2));    
        
        if(x1==x2&&y1==y2){ 
            if(r1 == r2)
                printf("-1\n");
            else
                printf("0\n");        
        }else if(abs(r1-r2)<&& i<(r2+r1))
            printf("2\n");
        else if(abs(r1-r2)==|| i==(r2+r1))
            printf("1\n");
        else
            printf("0\n");        
    }
    return 0;
반응형

+ Recent posts