반응형


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int testcase;
 
    cin>>testcase;
 
    int *arr3=new int[testcase];
    for(int i=0; i<testcase; i++)
    {
        cin>>arr3[i];
    }
    for(int i=0; i<testcase; i++)
    {
        int n=0;
        n=arr3[i];
 
        //for(int i=0;i<testcase;i++)
        //{
            int count=0;
            int num=0;
            int tmp=500;
            int bnum=0;
            int snum=0;
            
 
            int *arr=new int[n];
            
            
 
            for(int i=2;i<=n;i++)
            {
                arr[i]=i;
            }
 
            for(int i=2;i<n;i++)
            {
                for(int j=2;j<n;j++)
                {
                
                    if(arr[j]!=&& arr[j]%i==0)
                    {
                        arr[j]=0;
                    }
 
                }
            }
 
            for(int i=2;i<n;i++)
            {
                if(arr[i]!=0)
                {
                     //cout<<arr[i]<<endl;
                     count++;
                }
            }
 
            int *arr2=new int[count];
            int c=2;
            
            for(int j=0; j<count; j++)
            {
                for(int i=c;i<n;i++)
                {
                    if(arr[i]!=0)
                    {
                         arr2[j]=arr[i];
 
                         c=i+1;
                         break;
                         
                    }
                }
            }
 
            //for(int j=0;j<count; j++)
            //{
            //    cout<<arr2[j]<<endl;//arr[2]에 소수 0부터 순서대로 저장되있음
            //}
 
 
            for(int i=0;i<count;i++)
            {
                for(int j=0; j<count; j++)
                {
                    if(arr2[i]>=arr2[j]&&n-arr2[i]==arr2[j])
                    {    
                        num=arr2[i]-arr2[j];
                        if(tmp>num)
                        {
                            bnum=arr2[i];
                            snum=arr2[j];
                        }
                        tmp=num;
                    }
                }
            }
 
            cout<<snum<<" "<<bnum<<"\n";
        
        //}
    }    
}
cs
반응형
반응형

<문제링크>https://www.acmicpc.net/problem/2751

<문제>

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.


<입력>

 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절대값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

<출력>

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

<예제입력>

5
5
4
3
2
1


<예제출력>

1
2
3
4
5



이문제를 풀때 가장 힘들었던 것은, 시간초과가 걸렸던것이다.

처음에 버블정렬을 이용하려고 하였으나, 시간초과가 걸려서 sort정렬로 바꾸게 되었다.


sort정렬을 쓸때에는 #include<algorithm>과 using namespace std;를 써주고 써야한다.


또한 sort를 썼음에도 시간초과가 떳고, 

해결방법으로는 

ios::sync_with_stdio(false);

"\n"

이렇게 두가지를 바꾸었다. endl이 생각보다 시간초과가 많이되나보다...



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
 
    int *arr=new int[n];
 
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
 
    sort(arr,arr+n);
 
    for(int j=0;j<n;j++)
    {
    cout<<arr[j]<<"\n";
    }
}
cs


반응형
반응형

문제링크 : https://www.acmicpc.net/problem/2775


<문제>

평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층에 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야한다” 는 계약 조항을 꼭 지키고 들어와야 한다.

아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있나를 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층에 i호에는 i명이 산다.

<입력>

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1 <= k <= 14, 1 <= n <= 14)

<출력>

각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.


<예제입력>

2
1
3
2
3


<예제출력1>

6
10


<내답안>


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
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
using namespace std;
int main()
{
 
int testcase=0;
int c=0;
int h=0;
int *arr2=new int[testcase];
 
int arr[15][15];
 
    for (int i=0;i<15;i++)
    {
        arr[i][0]=1;
        arr[0][i]=i+1;
    }
 
    for(int i=1;i<15;i++)
    {
        for(int j=1;j<15;j++)
        {
            arr[i][j]=arr[i][j-1]+arr[i-1][j];
 
        }
    }
 
    cin>>testcase;
    for (int i=0; i<testcase; i++)
    {
    cin>>c;
    cin>>h;
 
    arr2[i]= arr[c][h-1];
    }
 
    for(int i=0; i<testcase; i++)
    {
    cout<<arr2[i]<<endl;
    }
 
 
}
cs


반응형
반응형

문제링크 : https://www.acmicpc.net/problem/4344


<문제>

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.


<입력>

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

<출력>

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

<예제입력>

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

<예제출력1>

40.000%
57.143%
33.333%
66.667%
55.556%





<내답안>

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<iostream>
using namespace std;
int main()
{
    cout << fixed;
    cout.precision(3);
 
    int n=0;//testcase
    float lol;
    cin>>n;
 
    float *arr=new float[n];
    for(int i=0; i<n; i++)
    {
        float avg;
        float people;
        int count=0;
        int tmp=0;
        int a=0;
 
        cin>>people;
        a=people;
        int *arr2=new int[a];
 
        for(int j=0; j<people; j++)
        {
            cin>>arr2[j];
            tmp=arr2[j]+tmp;//학생총점
        }
        avg=tmp/people;
        
 
        for(int j=0; j<people; j++)
        {
            if(arr2[j]>avg)
            {
                count++;
            }
        }
        lol=(count/people)*100;
        arr[i]=lol;
 
    }
 
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<"%"<<endl;
    }
    
 
}
cs


반응형

'알고리즘 > 알고리즘(c++)' 카테고리의 다른 글

백준[2751]_수 정렬하기2  (0) 2018.08.29
백준문제[2775번]_부녀회장이 될테야  (1) 2018.08.28
백준문제[1152]_단어의 개수  (0) 2018.08.27
백준문제[1205]_등수 구하기  (0) 2018.08.27
소수구하기  (0) 2018.05.01

+ Recent posts