[백준] 1929 with C++ 문제설명 입출력 예제 개념 자연수 M과 N 사이의 소수를 찾는 문제다. 소수를 구하는 알고리즘을 효율적으로 구하지 않는다면, 시간 초과가 걸리는 문제다. 풀이(1) #include int main() { std::ios::sync_with_stdio(false); std::cin.tie(NULL); int m, n; std::cin >> m >> n; for (int i = m; i Algorithm/백준 2023.04.06
[백준] 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
[백준] 1065 with C++ 문제설명 입출력 예제 개념 수가 주어졌을 때 인접한 수가 등차수열을 이루는지 확인하는 문제다. 풀이 #include using namespace std; int main() { int num; cin >> num; int count = 0; 한수를 확인할 정수를 num으로 초기화시키고, 개수를 출력할 카운트 변수 count를 초기화해 준다. for (int i = 1; i Algorithm/백준 2023.02.23
[백준] 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