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

 

2979번: 트럭 주차

첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100) 다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장

www.acmicpc.net

 

이번 문제는 문제 자체를 이해할 필요가 있다. 어려운 문제는 아니기는 하나 약간 헷갈릴 부분이 있기 때문이다.

문제에서 주차장에 도착한 시간과 떠나는 시간이 주어지는데, 도착한시간은 요금을 부과하고 떠나는 시간은

요금을 부과하지 않아야 문제가 풀리기 때문이다.

 

예를 들어 

예제문제의 '1 6' 이라는 입력값을 받게되면 1분 ~ 5분까지는 요금을 부과하고 떠나는시각인 6분에는 부과하지 않는다는 방식이다

 

 

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
#include <bits/stdc++.h>
 
using namespace std;
 
int a,b,c;
int parking[101];
int answer;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> a >> b >> c;            // a, b, c에 각각의 요금을 입력받는다
    
    for(int i = 0; i < 3; i++)
    {
        int n, m;                // n은 차가 주차장에 들어온시간 / m은 나간시간
        cin >> n >> m;
        for(int j = n; j < m; j++)
        {
            parking[j]++;            // 배열에 주차된 차의 대수를 저장한다
        }
    }
    
    for(int i = 1; i <= 100; i++)            // 해당 시각(분)에 주차장에 있는 차의 대수를 계산하여 요금을 계산한다
    {
        if(parking[i] == 1)
            answer += a;
        else if(parking[i] == 2)
            answer += (b * 2);
        else if(parking[i] == 3)
            answer += (c * 3);
    }
    cout << answer;            
    return 0;
}
cs

'문제풀이' 카테고리의 다른 글

<C/C++> 백준 10808 : 알파벳 개수  (0) 2022.08.10
<C/C++>백준 2309 : 일곱 난쟁이  (0) 2022.08.09

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

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

이번 문제는 문자열의 알파벳 갯수를 카운트 하여 출력하는 문제이다.

ASCII 코드라는 개념을 알고있다면 쉽게 풀 수 있는 문제이며, 배열을 사용하여 카운트를 올려줌으로써

문제를 쉽게 해결할 수 있다

 

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 <bits/stdc++.h>
 
using namespace std;
 
string s;
int arr[26];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    // 문자열 입력 받음
    cin >> s;
    
    // 문자 하나의 위치에 카운트
    for (int i = 0; i < s.length(); i++)
    {
        arr[s[i] - 'a']++;      // 'a' - 'a' = 0 / 'z' - 'a' = 25
    }
    
    // 출력
    for (int n : arr)
    {
        cout << n << " ";
    }
    cout << '\n';
    return 0;
}
cs

'문제풀이' 카테고리의 다른 글

<C/C++> 백준 2979 : 트럭주차  (1) 2022.08.26
<C/C++>백준 2309 : 일곱 난쟁이  (0) 2022.08.09

백준 2309 일곱 난쟁이

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

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 이 문제는 백준의 문제 중에서 쉬운 난이도에 들어간다. 이번에 인프런 큰돌 강의를 다시 보게되면서 다시 알고리즘 문제 연습을 시작하게 되었는데

그 중에 제일 첫 문제로 나온것이 일곱 난쟁이이다. 문제 자체는 크게 어려운 부분이 없으나 아직까지 효율적인 코드를 작성하는 부분에 있어서 미흡하므로

반복문이 많이 들어간 것같다

 

코드는 대략 이러하다

 

전제조건 

일곱 난쟁이의 키의 총합이 100이 나와야 하고 7명을 뽑아서 출력해야 한다

단, 출력순서는 오름차순으로 출력한다

여러 정답중에 하나만 나오면 되므로 위 두 가지 조건만 성립하면 정답으로 처리된다

 

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
#include <bits/stdc++.h>
 
using namespace std;
 
vector<int> v;
vector<int> ans;
int sum, n, m;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    // 9명의 난쟁이를 입력 받는 부분
    for(int i = 0; i < 9; i++)
    {
        int a;
        cin >> a;
        v.push_back(a);
    }
 
    // 9명의 난쟁이들의 키의 총합을 더하는 부분
    sum = accumulate(v.begin(), v.end(), 0, plus<int>());
 
    // 조합을 통해서 문제에서 요구하는 키 총합 100 에 맞는 값을 찾는 부분
    for(int i = 0; i < 9; i++)
    {
        for(int j = i; j < 9; j++)
        {
            // vector의 두 요소를 더한 값을 빼서 100이 나오면 제외 대상이다
            if(sum - (v[i] + v[j]) == 100)
            {
                n = i;
                m = j;
            }
            if(m != 0)
                break;
        }
        if(n != 0)
            break;
    }
    
    // 위에서 뽑아낸 제외대상을 뺀 나머지를 정답 배열 안에 넣어준다
    for(int i = 0; i < 9; i++)
    {
        if(i == n || i == m)
            continue;
        ans.push_back(v[i]);
    }
    // 오름차순으로 정렬을 한다
    sort(ans.begin(), ans.end());
    // 출력
    for(int a : ans)
    {
        cout << a << '\n';
    }
    return 0;
}
cs

 

큰돌님은 이 문제를 do while을 사용하여 permutation을 사용하여 간결하게 짜셨다. 아직 이 정도 까지의 깔끔한 코드까지는 멀어보인다.

'문제풀이' 카테고리의 다른 글

<C/C++> 백준 2979 : 트럭주차  (1) 2022.08.26
<C/C++> 백준 10808 : 알파벳 개수  (0) 2022.08.10

+ Recent posts