본문 바로가기

분류 전체보기

(297)
(C언어) 백준온라인 7568번(덩치) https://www.acmicpc.net/problem/7568 #include int main(void) { int N, i, j, k; int arr[50][2]; scanf("%d", &N); for (i = 0; i < N; i++) { scanf("%d %d", &arr[i][0],&arr[i][1]); } for (i = 0; i < N; i++) { k = 0; for (j = 0; j < N; j++) if (arr[i][0] < arr[j][0] && arr[i][1] < arr[j][1]) k++; printf("%d ", ++k); } return 0; } 처음에는 키, 몸무계 따로 배열을 생성하려고 했으나 이차원배열이 조금 더 어울리다는 생각이 들어 이차원배열로 입력값을 받게 되었..
(C언어) 백준 온라인-별 찍기 #include int main(void) { int n; scanf("%d",&n); for (int i = 0; i < n; i++) { for (int j = 0; j
(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..
if문 이해 if문에서 if블록에 해당되는(if문에 영향을 받는)문장은 어디까지인가? #include int main(void) { int a; int sum = 0; int i = 1; scanf("%d", &a); for (i = 1; ; i++) { sum += i; if (sum >= a) printf("%d", i); break; } return 0; } 위 코드는 a값이 1이하이면, 정상적으로 출력이 되지만 1을 초과한 수가입력이 되게 되면, 정상적으로 출력이 되지않는다. if (sum >= a) printf("%d", i); break; 의 문장에서 if블록 내에 속하는 문장은 printf문 뿐이다. break문은 if문내에 속하지 않는다. 그래서 조건이 성립되지 않으면, 값을 출력하지 못하고 break..
(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 입력시..