목록백준 (26)
언유상씨의 건전한 취미생활

문제 이름 : 인기 투표 문제 번호 : 11637 사용 언어 : C++ 문제는 다음과 같다. 각 후보들의 득표수를 모두 더하면서, 동시에 가장 많은 표를 받은 후보의 번호와 받은 표의 수를 비교하면서 진행한다. 마지막에 가장 많은 표를 받은 후보가 몇명인지를 계산하여, 여러명의 후보가 최다 득표자인 경우를 처리한다. 이번 문제 역시도 시간이 넉넉해서 풀기에 어렵지 않은 문제였다. 소스 코드는 다음과 같다. 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 #define _CRT_SECURE_NO_WARNINGS #include..

문제 이름 : 영식이와 친구들 문제 번호 : 1592 사용 언어 : C++ 문제는 다음과 같다. 시간이 넉넉해서 풀기에 어렵지 않은 문제이다. 베열을 만들어 놓고, 돌아가면서 하나씩 선택하면된다. 각 사람이 몇번 받았는지를 확인하면서 진행하면 된다. 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 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; int main() { ios_base::sync_with_stdi..

문제 이름 : 소수 찾기 문제 번호 : 1978 사용 언어 : C 문제 유형 : 완전 탐색 문제는 다음과 같다. 빈 배열을 만든 뒤 제시된 원소를 넣고 소수의 개수를 세면 된다. 이때 소수를 판별하는 방법으로는 두가지 방법을 같이 쓸 것이다. 1. 숫자가 2 또는 3인가? 2. 숫자 보다 작은 수들중 나눈 값의 나머지가 0인 수가 있는가? 2번 조건을 조금만 더 생각해보면 다음과 같은 결론에 도달할 수 있다. 소수가 아닌수는, 제곱근의 값을 중심으로 앞 뒤에 나누는 수가 존재한다는 것. 예를 들어보면 다음과 같다. 36 의 약수 - 1 2 3 4 6 9 12 18 36 제곱근인 6을 전후의 값을 곱한다는 것을 알 수 있다. 따라서 1부터 제곱근 값 사이에서 원래 수를 나눌 수 있는 수가 없다면, 그 수는..

문제 이름 : 홀수 문제 번호 : 2576 사용 언어 : C 문제 유형 : 완전탐색 문제는 다음과 같다. 입력값들을 전부 배열에 담아서, 배열의 원소를 완전 탐색하며 문제를 해결하면 된다. 코드는 다음과 같다. #include int main() { int arr[7]; int sum = 0, min =100; for (int i = 0; i

문제 이름 : 더하기 사이클 문제 번호 : 1110 사용 언어 : C 문제 유형 : 구현 문제는 다음과 같다. 십의 자리와 일의 자리를 분리하는 부분만 신경쓴다면 상대적으로 간단한 문제다. 평소에 잘 쓰이지 않는 do - while 문을 사용해서 코드를 작성해 보았는데, 충분히 다른 방식으로도 짤 수 있을것이다. 코드는 다음과 같다. #define _CRT_SECURE_NO_WARNINGS #include int main() { int n; int l1, l2, r2; int cnt = 0; scanf("%d", &n); int k = n; do{ l1 = n / 10; // 앞자리 계산 l2 = n % 10; // 뒷자리 계산 r2 = (l1 + l2) % 10; n = (l2 * 10) + r2; c..

문제 이름 : 저항 문제 번호 : 1076 사용 언어 : C 문제 유형 : 구현 문제는 다음과 같다. 이 문제의 핵심 아이디어는 각 입력값을 문제가 원하는 대로 처리하기 위해 배열과, 조건문을 사용한다는 것이다. n이라는 변수가 들어온다고 했을때, 첫 번째로 입력받는 값은 10의 자리숫자이고, 두번째로 받은 숫자는 일의 자리 숫자이므로 조건문을 통해 몇번째로 들어온 숫자인지 확인하고, 그에 맞는 값을 이용하면 된다. 마지막에 곱해줘야 하는 값은 배열을 통해 인덱스로 접근한다. 따라서 코드는 다음과 같다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { int gb[11] = { 1, 10, 100, 1000, 10000, 100000, 10..

문제 이름 : 방 번호 문제 번호 : 1475 사용 언어 : C 문제 유형 : 구현 문제는 다음과 같다. 이 문제에서의 핵심 아이디어는, 6과 9는 서로 뒤집어서 사용할 수 있다는 것이다. 6과 9의 개수에 +1 을 하여 반으로 나누어 주면, 그것이 6, 9를 이용할때 필요한 세트수이다. 나머지 숫자들은 서로 뒤집어서 사용할 수 없으므로 숫자의 개수 = 필요한 세트수 가 된다. 이들중 가장 큰 세트 수를 구하면 된다. 따라서 다음과 같은 코드가 나온다. #include int main() { int n, arr[10] = { 0, }; scanf("%d", &n); while (n != 0) { arr[n % 10]++; n /= 10; } int temp = (arr[6] + arr[9] + 1) / ..

문제 이름 : 앵그리 창영 문제 번호 : 3034 사용 언어 : C 문제 유형 : 구현 문제는 다음과 같다. 문제를 풀어보도록 하자. 이번 문제 풀이에서 중요한 아이디어는, 상자 바닥에 대각선으로 들어가도 인정해 준다는 것이다. 계산을 쉽게하기 위해 math.h의 sqrt() 함수를 사용하도록 하자.(제곱근값을 반환하는 함수이다.) 따라서 다음과 같은 코드가 나온다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { int n, w, h, s; scanf("%d", &n); scanf("%d", &w); scanf("%d", &h); for (int i = 0; i < n; i++){ scanf("%d", &s); if (s