본문 바로가기

Coding Tests

(78)
(C언어) 백준 온라인 2798번-블랙잭 처음 이문제에 접근할 때는 , 반복문을 세 번 중첩을 해 세수를 더해, 입력받은 M에서 이 세수를 더한 것을 빼, 이 뺀 값을 각 배열 요소에 넣어 min값을 구하여 이 min값이 나온 그 해당 세수가 답으로 출력되게끔 하려 했었다. 그런데 이 방법은 옳지 않은 방법일 뿐더러, 이 방법을 구현하지 못한 가장 큰 이유는 for문의 중첩을 완전하게 이해하고 있지 못함에 있었던 것 같다. 특히 삼중중첩을 사용해본 경험이 드물다 보니까 더 그랬던 것 같다. 그래서 처음 이 문제의 풀이를 볼 때, 삼중 중첩을 어떻게 사용을 했을까? 에 초점을 맞춰서 풀이를 보았는데, 나 스스로 개념을 잘 잡지 못하고 있으니 풀이를 봐도 명확한 느낌이 들지 않았다. 그래서 직접 for문의 삼중 중첩을 만들어 결괏값을 출력해보았고,..
C언어_백준 온라인 2588번 #include #include void reverse(char arr[]) { int len = strlen(arr); for (int i = 0; i < len / 2; i++) { char temp = arr[i]; arr[i] = arr[len - i - 1]; arr[len - i - 1] = temp; } } int main(void) { char A[4], B[4]; scanf("%s", A); scanf("%s", B); int i = 0; int carry = 0; int sum[5]; reverse(A); reverse(B); for (i = 0; i < 3; i++); { sum[i] = ((B[0] - '0') * (A[i]))%10 + carry; carry = sum[i] / 1..
(C언어)백준온라인 2753번 조건문 part #include int main(void) { int Y; scanf("%d", &Y); if ((Y % 4 == 0) && (Y % 100 != 0)) printf("%d", 1); if ((Y % 4 == 0) && (Y % 400 == 0)) printf("%d", 1); if (Y % 4 != 0) printf("%d", 0); return 0; } 지문 상의 조건을 쪼개어 구성하였는데, 대표적인 예외 숫자 하나를 대자면, 1900이라는 숫자이고 아무 출력 값이 나오지 않는다. 그러므로 틀린 코드이다. #include int main(void) { int Y; scanf("%d", &Y); if ((Y % 4 == 0) && (Y % 100 != 0)||(Y % 4 == 0) &&..
( C ) 백준온라인 2562번(최댓값과 번호 구하기) #include int main(void) { int arr[9]; int max = 0; for (int i = 0; i < 9; i++) { scanf("%d", &arr[i]); if (max < arr[i]) max = arr[i]; } printf("%d\n", max); for (int i = 0; i < 9; i++) { if (max == arr[i]) printf("%d", i + 1); } return 0; } 최댓값을 먼저 구해 출력을 하고, 그다음에 if문의 max == arr[ i ] 조건을 통해 그 최댓값이 몇번쨰로 입력이 되었는지를 구하였다. max == arr[ i ]의 조건은 이미 최댓값을 알고 있기에 가능한 조건이다. i + 1을 출력해준 이유는 배열의 인덱스 넘버가 0부..
( C ) 백준-10952번 #include int main(void) { int A, B; while (1) { scanf("%d %d", &A, &B); printf("%d\n", A + B); if (A + B == 0) break; } return 0; } 0 0이 입력됨과 동시에 프로그램이 종료되어야 하지만, 0 + 0 을 출력 한뒤에 0 + 0이면(if) break가 적용이 되어 버려 오답이다. #include int main(void) { int A, B; while (1) { scanf("%d %d", &A, &B); if ((A==0)&&(B==0)) break; printf("%d\n", A + B); } return 0; } if ((A==0)&&(B==0)) break; 의 문장을 통해 A B값 둘다 0 입력시..
( C ) 백준 -10951번 <EOF 사용> #include int main(void) { int A, B; for (int i = 0; ;i++) { scanf("%d %d", &A, &B); printf("%d\n", A + B); } return 0; } 출력초과가 나올걸 알면서도, 작성한 코드인데 이상태에서 종료의 조건이 뭐가 될 수 있을까 꾀 오래 고민했었다. #include int main(void) { int A, B; while (scanf("%d %d", &A, &B) != EOF) { printf("%d\n", A + B); } return 0; } 문제를 보면 테스트케이스의 종료조건이 명시되어있지 않다. 그래서 문제를 풀때 어떻게 종료조건을 설정해 줄 수있을 까 많이 고민을 하였다. break도 고민하여 보았고 배열을 사용해 볼..
( C ) 백준 10950 (A+B) #include int main(void) { int A[10], B[10]; int i=0, T; scanf("%d", &T); for (i = 0; i < T; i++) { scanf("%d %d", &A[i], &B[i]); } for (i = 0; i < T; i++) { printf("%d\n", A[i] + B[i]); } return 0; } 처음 런타임 에러가 발생했던 풀이인데, 배열의 길이 값 때문에 에러가 났을 것이라 생각하고 밑의 코드를 새로 작성해 보았다. #include int main(void) { int i=0, T; scanf("%d",&T); int A[T], B[T]; for (i = 0; i < T; i++) { scanf("%d %d", &A[i], &B[i]); } ..
( C )백준 1008번 A/B #include int main(void) { int A, B; scanf("%d %d", &A, &B); printf("%.9f", (double)A / (double)B); return 0; } 예전에 풀었고 맞았던 문제이지만, 한번 더 풀어 보던 중 문제 지문의 출력 부분에서 정답과 출력 값의 절대 오차 또는 상대오차가 10의 -9승 이하이면 정답이다.라는 말에서 절대 오차와 상대오차가 무엇인지 찾아보았다. c언어에서 float형은 상대오차가 10의 -7승 정도이고 double형은 10의 -15승 정도로 float형은 유효숫자 7자리까지 double형은 15자리이하까지 정확하게 표현이 가능하다는 뜻이다. 그러므로 문제에서 오차가 10의 -9승 이하이면 정답이라 했으므로 이의 범위를 포함시키는 dou..