문제

두 수의 합 백준 3273 c++

"맞았습니다."코드

#include <bits/stdc++.h>
using namespace std;
​
int num[2000001] = {};
int N, sum;
int cnt;
​
void func(){
​
    cin >> N;
    int a = 0;
​
    for(int i = 0; i < N; i++){
        cin >> a;
        num[a]++; // 입력받은 숫자에 해당하는 인덱스에 존재한다고 1 표시
    }
​
    cin >> sum; // 목표 합 
​
    for(int i = 0; i < (sum+1)/2; i++){ // (2,3)과 (3,2) 중복 카운팅 방지.
        // i와 sum-i 라는 숫자가 존재하는지 확인. 
        if(num[i] == 1 && num[sum-i] == 1){
            cnt++;
        }
    }
​
    cout << cnt;
}
​
​
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
​
    func();
    return 0;
}

 


리뷰

쫌 헷갈렸다.

정렬 되지 않은 순서로 숫자 리스트를 받는다.

따라서 목표 합이 5일 때, (2,3) 쌍과 (3,2) 쌍을 두 번 체크하지 않도록 유의해야 한다.

애초에 배열을 200만개를 만들어 놓고, 입력받은 숫자를 인덱스로 이용했다.

즉 3, 5, 7을 받으면 배열 인덱스 3, 5, 7의 값에 1을 할당한다.

조건체크

if(num[i] == 1 && num[sum-i] == 1)

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

에디터 list, queue로 2가지로 풀어본 코드 백준 1406번 c++  (0) 2021.11.22
strfry 백준 11328 c++  (0) 2021.11.22
방 번호 백준 1475 c++  (0) 2021.11.21
알파벳 개수 백준 10808번  (0) 2021.11.21
숫자 백준 10093 c++  (0) 2021.11.20

문제

방 번호 백준 1475 c++

"맞았습니다."코드

#include <bits/stdc++.h>
using namespace std;
​
int maxnum = 1; // 최소 세트 개수는 1개다. 
int N;
int arr[10]; // 0부터 9
​
void func(){
​
    cin >> N;
​
    while(N > 0){
        int target = N%10; // 자리수 1개 분리 하기 
        arr[target]++; // 자리수 개수 카운팅 
        N /= 10;
    }
​
    for(int i=0; i<=9; i++){
        if(i==6 || i==9) continue;
        maxnum = max(maxnum, arr[i]);
    }
    // (a[6]+a[9])/2를 올림한 값이
    // 6, 9에 대한 필요한 세트의 수이므로 (a[6]+a[9]+1)/2을 계산
    maxnum = max(maxnum, (arr[6]+ arr[9]+1) / 2);
​
    cout << maxnum;
}
​
​
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
​
    func();
    return 0;
}


리뷰

최소 세트 개수는 1개다.

6과 9는 서로 대신 쓸 수 있기 때문에. 마지막에 처리를 해준다.

 

(a[6]+a[9])/2 를 올림한 수가 6, 9에 대한 필요한 세트의 수다.

6이 2개, 9가 3개 필요한 경우, 올림한 3개의 세트가 필요하다.

 

6의 개수 9의 개수 필요한 세트 수 6와 9개수에 1을 더해서 세운 식
1개 1개 1개 (1+1 +1) / 2 = 1
2개 1개 2개 (2+1 +1) / 2 = 2
2개 2개 2개 (2+2 +1) / 2 = 2
2개 3개 3개 (2+3 +1) / 2 = 3

1212669 가 input으로 들어왔다고 하자.

6, 9를 제외한 다른 수를 확인했을 때 maxnum이 2 였다.

6은 2개, 9는 1개다. 6과 9만 생각하면 2세트가 있으면 된다.

maxnum = max(maxnum, (arr[6]+ arr[9]+1) / 2);

이렇게 maxnum과 비교하면 정답은 2가 된다.

728x90

'알고리즘 > 백준' 카테고리의 다른 글

strfry 백준 11328 c++  (0) 2021.11.22
두 수의 합 백준 3273번 c++  (0) 2021.11.22
알파벳 개수 백준 10808번  (0) 2021.11.21
숫자 백준 10093 c++  (0) 2021.11.20
일곱 난쟁이 백준 2309 c++  (0) 2021.11.20

문제

알파벳 개수 백준 10808번

"맞았습니다"코드

#include <bits/stdc++.h>
using namespace std;
​
// 백준 10808 알파벳 개수
string target;
vector<int> answer(27);
​
void func(){
​
    cin >> target;
​
    int stringSize = target.size();
​
    for(int i =0; i < stringSize; i++){ // 단어 길이만큼 검사 
        answer[target[i]-97]++;
    }
​
    for(int i =0; i < 26; i++){ // 출력 
        cout << answer[i] << ' ';
    }
}
​
​
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
​
    func();
    return 0;
}

 

리뷰

소문자 알파벳 a는 아스키코드로 97이다. z는 127이다. 

a - 97 은 0과 같다.

b - 97 은 1이다.

이것을 인덱스로 활용해서 개수를 셌다.

728x90

'알고리즘 > 백준' 카테고리의 다른 글

두 수의 합 백준 3273번 c++  (0) 2021.11.22
방 번호 백준 1475 c++  (0) 2021.11.21
숫자 백준 10093 c++  (0) 2021.11.20
일곱 난쟁이 백준 2309 c++  (0) 2021.11.20
윷놀이 백준 2490 c++  (0) 2021.11.19

문제

숫자 백준 10093

"맞았습니다"코드

#include <bits/stdc++.h>
using namespace std;

// 백준 10093 숫자
long long A, B, cnt;

void func(){

    if (A > B) {
        swap(A, B);
    }
    if(A == B || B-A == 1){
        cout << 0;
    }
    else{
        cnt = abs(A-B)-1;
        cout << cnt << '\n';
        for(long long i = A+1; i < B; i++){
            cout << i << " ";
        }
    }
}

void input(){

    cin >> A >> B;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    input();
    func();

    return 0;
}

리뷰

다시 풀어봐야 할 문제다.

A와 B가 같은 경우와, A와 B가 1차이 나는 숫자인 경우를 생각 못했었다.

 

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

방 번호 백준 1475 c++  (0) 2021.11.21
알파벳 개수 백준 10808번  (0) 2021.11.21
일곱 난쟁이 백준 2309 c++  (0) 2021.11.20
윷놀이 백준 2490 c++  (0) 2021.11.19
홀수 백준 2576 c++  (0) 2021.11.19

문제

일곱 난쟁이

 

코드

#include <bits/stdc++.h>
using namespace std;
​
// 백준 2309 일곱 난쟁이
vector<int> dwarf(10);
int sum = 0;
​
void func(){
​
    vector<int> result;
    bool extFlag = false;
​
    for(int i = 0; i < 8; i++){ // 0번째 부터 8번째 까지
        sum -= dwarf[i];
​
        for(int j = i+1; j < 9; j++){ // i+1번째 부터 9 번째 까지
            sum -= dwarf[j];
​
            if(sum == 100){
​
                for(int a = 0; a < 9; a++){
                    if(a != i && a != j){
                        result.push_back(dwarf[a]);
                    }
                }
                extFlag = true;
                break;
            }else{
                sum += dwarf[j];
​
            }
        }
        sum += dwarf[i];
        if(extFlag){
            break;
        }
    }
​
    // 정렬 후 출력
    sort(result.begin(), result.end());
    for(int i = 0; i< 7; i++){
        cout << result[i] << '\n';
    }
}
​
void input(){ // 입력 받고 키의 합 누적 
    for(int i = 0; i < 9; i++){
        cin >> dwarf[i];
        sum += dwarf[i];
    }
}
​
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
​
    input();
    func();
​
    return 0;
}

 

리뷰

2개 고르는 것을 permutation을 썼다가 시간을 버렸다.

2중 for문으로 풀면 되는데! 하하..

기본 로직은 2중 for문으로 겹치지 않는 인덱스 i와 j를 구하는 것이다.

미리 구해뒀던 총합 sum에서 i와 j를 뺐을때 100이 되면, 난쟁이 7명을 제대로 찾은 것이다.

2중 for문을 탈출하기 위해 extFlag를 두었다.

728x90

'알고리즘 > 백준' 카테고리의 다른 글

알파벳 개수 백준 10808번  (0) 2021.11.21
숫자 백준 10093 c++  (0) 2021.11.20
윷놀이 백준 2490 c++  (0) 2021.11.19
홀수 백준 2576 c++  (0) 2021.11.19
주사위 세개 c++ 백준 2480  (0) 2021.11.19

문제

윷놀이 백준 2490 c++

 

"맞았습니다."코드 

#include "iostream"
using namespace std;

// 백준 2490 윷놀이
int a, result;
string str = "DCBAE";

void func(){

    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 4; j++){
            cin >> a;
            result += a;
        }
        cout << str[result] << '\n';
        a = result = 0;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    func();
    return 0;
}


리뷰 

 

답으로 출력할 문자를 이어붙여서 문자열 "DCBAE" 로 만들었다. 

1의 개수를 인덱스로 썼다. 

  0의 개수 1의 개수  문자
1 3 A
2 2 B
3 1 C
4 0 D
0 4 E

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

숫자 백준 10093 c++  (0) 2021.11.20
일곱 난쟁이 백준 2309 c++  (0) 2021.11.20
홀수 백준 2576 c++  (0) 2021.11.19
주사위 세개 c++ 백준 2480  (0) 2021.11.19
BFS 스페셜 저지 백준 16940 c++  (0) 2020.11.05

문제 

홀수 백준 2576

 

"맞았습니다"코드 

#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;

// 백준 2576 홀수
int a;
vector<int> v;
int sumOfOdd;

void func(){

    for(int i = 0; i < 7; i++){
        cin >> a;
        if(a % 2 == 1){
            sumOfOdd += a;
            v.push_back(a);
        }
    }

    sort(v.begin(), v.end());

    if(sumOfOdd == 0){
        cout << -1;
    }else{
        cout << sumOfOdd << '\n';
        cout << v[0];
    }
}


int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    func();
    return 0;
}

 

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

일곱 난쟁이 백준 2309 c++  (0) 2021.11.20
윷놀이 백준 2490 c++  (0) 2021.11.19
주사위 세개 c++ 백준 2480  (0) 2021.11.19
BFS 스페셜 저지 백준 16940 c++  (0) 2020.11.05
N과 M(5), (6) 백준 15654번 c++  (0) 2020.10.22

+ Recent posts