목록건전한 취미생활 - 알고리즘 (30)
언유상씨의 건전한 취미생활

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

문제 이름 : 플러그 문제 번호 : 2010 사용 언어 : C 문제 유형 : 구현 문제는 다음과 같다. 이 문제에서 가장 중요한 아이디어는 멀티탭을 연결하면 꽂을 수 있는 구멍 하나가 줄어든다는 것이다. 따라서 코드는 다음과 같다. #define _CRT_SECURE_NO_WARNINGS #include int main() { int n, s; int temp = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { # scanf("%d", &s); temp += s; } printf("%d", temp - (n - 1)); return 0; }

문제 이름 : 방 번호 문제 번호 : 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

문제 이름 : 색종이 문제 번호 : 2563 사용 언어 : C 문제 유형 : 구현 문제는 다음과 같다. 문제를 풀어보도록 하자. 이 문제를 풀 때 있어서의 핵심 아이디어는, 0으로 꽉 채운 배열에 색종이가 올려진 부분들을 1로 바꾸어 준뒤 1의 개수를 세면 된다! 따라서 코드는 다음과 같다. #define _CRT_SECURE_NO_WARNINGS #include int main() { int pan[100][100] = { 0, }; #0으로 채워진 2차원 배열 int n, r, h; int cnt = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d %d", &r, &h); for (int m = 100 - (h + 10);..

문제 이름 : 설탕 배달 문제 번호 : 2839 사용 언어 : C 문제 유형 : 구현 문제는 다음과 같다. 문제를 풀어보도록 하자. 5kg과 3kg을 잘 섞어서 제시된 무게를 맞추는 경우들 중, 봉지의 개수가 가장 적은 경우를 고르면 된다. 따라서 이런 코드가 나오게 된다. #include int main() { int n, ans; int k = 1500; int chk = 0; scanf("%d", &n); for (int x = 0; x < n; x++ ) { for (int y = 0; y < n; y++ ) { if (3 * x + 5 * y == n) { ans = x + y; chk = 1; if (ans