Algorithm/백준 75

[백준] 25206 with C++

문제설명 입출력 예제 개념 학점의 평균을 계산하는 문제다. 학점을 계산하는 방법은 다음과 같다. 전공 학점: 학점 * 과목 평점 전공 학점 평균: 전공 학점 / 총 학점 P 과목은 제외 따라서 전공 학점들을 계산하여 모두 더한 후 총 학점으로 나눠주면 문제를 해결할 수 있다. 풀이 (1) #include int main() { int count = 0; float sum = 0; float grades[9] = { 0 }; std::string str[9] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F"}; 신청한 총 학점을 계산할 count, 학점의 총합을 계산할 sum, A+부터 F까지 학점을 계산할 grades 변수를 선언한다. for (int i..

Algorithm/백준 2023.04.05

[백준] 2563 with C++

문제설명 입출력 예제 개념 겹친 색종이를 제외한 나머지의 색종이의 넓이를 구하는 문제다. 전체 넓이에서 색종이가 차지하고 있는 곳을 빼는 방식과, 색종이가 차지하고 있는 곳의 개수를 찾으면 간단하게 해결되는 문제다. 풀이 #include int main() { int ary[100][100] = { 0 }; int n, result = 0; std::cin >> n; 먼저 2차원 배열 ary를 선언해 주고, 색종이의 개수를 n으로 초기화한다. 그리고 넓이를 출력할 result 변수도 선언해 준다. while (n--) { int y, x; std::cin >> y >> x; for (int i = y - 1; i < y + 9; i++) { for (int j = x - 1; j < x + 9; j++)..

Algorithm/백준 2023.04.02

[백준] 2559 with C++

문제설명 입출력 예제 개념 특정 구간까지의 수열의 합을 구하는 문제다. 단순히 반복문을 중첩시켜 결괏값을 얻으려 하면 십중팔구 시간초과에 걸린다. 이러한 문제처럼 연속된 값을 더하는 문제를 풀 땐 구간합 개념을 이용하면 쉽게 해결할 수 있다. 구간합(Prefix Sum) - 수열에서 특정 구간의 합 풀이 #include using namespace std; int N, K, temp, sum[100001], ret = -2147483647; int main() { cin >> N >> K; 온도를 측정한 전체 날짜의 수 N, 합을 구하기 위한 연속적인 날짜의 수 K, 구간합을 구할 배열 sum, 구간합 배열의 최솟값 변수 ret을 초기화한다. 이때 ret의 값은 int의 최솟값이다. for (int i ..

Algorithm/백준 2023.02.27

[백준] 9375 with C++

문제설명 입출력 예제 개념 의상의 종류의 개수에 따라 경우의 수를 계산하는 문제다. 의상의 종류와 개수를 매칭시킬 수 있으므로 map 자료구조를 이용하여 카운팅할 때 사용하면 된다. 여기서 조합(Combination)의 개념이 등장하는데, 서로 다른 n개의 원소를 순서에 상관없이 r개의 원소를 선택하는 것이다. 예를 들어 headgear, headgear, eyewear, face를 골랐으면 다음과 같이 계산하면 된다. 풀이 #include #include using namespace std; int main() { int num; cin >> num; 테스트 케이스의 개수를 num으로 초기화한다. while (num--) { map _map; int n; cin >> n; int result = 1; ..

Algorithm/백준 2023.02.24

[백준] 1620 with C++

문제설명 입출력 예제 개념 문자열을 입력받아 숫자와 매칭시키는 문제다. 정해진 개수만큼 문자열 입력이 끝나면, 숫자를 입력했을 때 문자열을 출력하고, 문자열을 입력했을 때 숫자를 출력하면 된다. 따라서 2개의 값을 매칭시키는 문제이므로 map 자료구조를 이용해 주면 된다. 풀이 #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 이 문제를 풀다 보면 시간 초과 문제가 빈번하게 일어난다. 따라서 이를 미연에 방지하기 위해 c언어와의 싱크를 해제해 주고, cin과 cout의 tie를 풀어 시간을 조금이라도 단축시켰다. int n, m; cin >..

Algorithm/백준 2023.02.22

[백준] 1940 with C++

문제설명 입출력 예제 개념 실버 단계에 랭크되어 있지만, 문제만 제대로 이해한다면 브론즈 단계의 문제다. 고유 번호를 합쳤을 때, 갑옷을 만드는 데 필요한 수를 확인하면 간단하게 해결할 수 있는 문제다. 풀이 #include using namespace std; int main() { int N, M, cnt = 0; int ary[150001] = {0}; cin >> N >> M; for (int i = 0; i > ary[i]; 재료의 개수 N, 갑옷을 만드는 데 필요한 개수 M, 재료의 고유 번호 ary를 초기화해준다. for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { if (ary[i] + ary[j] =..

Algorithm/백준 2023.02.21

[백준] 3986 with C++

문제설명 입출력 예제 개념 주어진 문자열에서 문자를 하나씩 확인하며 이전 문자와 비교를 하여 좋은 단어인지 확인하는 문제다. 입출력 예제를 분석해보면 다음과 같다. 풀이 #include #include using namespace std; int main() { int num; cin >> num; int cnt = 0; 입력 받을 단어의 개수를 num으로 초기화하고, 좋은 단어의 개수를 초기화할 변수 cnt를 선언한다. for (int i = 0; i > str; stack input; 좋은 단어인지 확인할 문자열을 str로 초기화한다. 그리고 이 문제의 핵심인데, 문자를 하나씩 확인하며 이전 문자와 비교하여 최종적으로 좋은 단어인지 확인할 때 사..

Algorithm/백준 2023.02.20

[백준] 1193 with C++

문제설명 입출력 예제 개념 분수의 규칙을 이용해 n번 째 위치의 분수는 어떤 값인지 추측하는 문제다. 현재 값을 기준으로 증감의 규칙을 추론하여 다음 값을 추측하는 방법이 있고, 입력받은 정수의 위치를 추론하여 접근할 수 있는 방법이 있다. 풀이 풀이(1) 증감폭 이용 #include #include using namespace std; int main() { int num; cin >> num; int i = 0; int x = 1, y = 1; 정수를 입력받고, x/y 꼴로 출력되는 변수 x와 y를 각각 1로 초기화해 준다. 그리고 반복의 횟수를 결정하는 변수 i도 0으로 초기화해 준다. while (i < num) { int an = round(sqrt(2 * i)); // 현재 int bn = r..

Algorithm/백준 2023.02.19

[백준] 1316 with C++

문제설명 입출력 예제 개념 연속된 문자가 나타났을 때, 그 사이에 교차되는 문자가 있는지 확인하는 문제다. 이를 그림으로 나타내면 다음과 같다. 따라서 반복되는 문자열을 모두 지웠을 때 같은 문자가 존재한다면 그룹단어가 아니게 된다는 것을 이용하면 된다. 풀이 #include #include #include using namespace std; int main() { int num = 0; cin >> num; int cnt = 0; 단어의 개수를 num으로 받고, 그룹 단어 개수를 출력할 cnt를 초기화한다. for (int i = 0; i > str; bool check = true; str.erase(unique(str.begin(), str...

Algorithm/백준 2023.02.18