반응형

백준알고리즘 129

[C] 백준알고리즘 #8958 OX퀴즈

OX퀴즈의 점수를 구하는 문제이다 단순히 O의 개수를 구하는 문제가 아니라 O가 연속될수록 점수가 1점 2점 3점... 으로 늘어나기 때문에 주의해야 한다. 먼저 입력조건에 80보다 작다고 했으니 80의 크기를 가진 배열을 생성해준다. 각 점수를 넣을 score 변수와 점수를 합할 sum변수도 만들어준다. #include #include int main() { int n; int score, sum; char str[80]; scanf_s("%d", &n); for (int i = 0; i < n; i++) { sum = 0; score = 0; scanf_s("%s", str, 80); for (int j = 0; j < strlen(str); j++) { if (str[j] == 'O') { scor..

[C] 백준알고리즘 #1546 평균

n개의 정수를 입력받고 각 수들을 x / 최대값 x 100으로 바꾼 후 평균을 구하는 문제이다. 먼저 n개의 정수를 저장하기 위한 배열을 만든다 이 때 입력조건에서 이 값은 1000보다 작다 로 되어있으므로 배열의 크기를 a[1000]으로 지정한다. 최대값을 저장할 max변수 총점을 저장할 sum변수 평균값을 저장할 avg변수를 만드는데 sum변수와 avg 변수는 소수점 아래까지 표기해야하므로 자료형을 double로 지정한다. for문을 이용하여 n개의 값을 입력받아 a[ ] 배열에 차례대로 저장한 후 max와 비교하여 최대값을 저장해둔다. 그 후 다시 for문을 이용하여 각 a[ ]의 원소들을 조건에 맞게 /최대값 x 100 으로 저장한다. (이 값들이 소수점 아래까지 표시되므로 배열선언도 double..

[C] 백준알고리즘 #3052 나머지

정수 10개를 입력받아 이를 42로 나눈 나머지 중 서로 다른 수가 몇개인가를 구하는 문제이다. 어떤 수를 42로 나누면 나머지가 0~41까지 나올 수 있으므로 이를 저장하는 배열 a[42]를 만들어 놓은 후 나머지가 n이라면 a[n]의 수를 1 증가시키는 방법으로 0부터 41까지의 나머지를 찾을 수 있겠다. 여기서는 서로 다른 수의 갯수를 찾는 것이므로 a[n]이 1이 아닌경우에만 1을 넣어주고 모든 수를 입력 받은 후에는 for문을 이용하여 a[ ] 배열에서 값이 1인 것들만 찾아서 카운트해주면 된다. #include int main() { int n; int a[42] = { 0 }; int count = 0; for (int i = 1; i

[C] 백준알고리즘 #2577 숫자의 개수

A B C를 곱한 값이 x라고 할 때, 0부터 9까지의 숫자가 각각 몇번씩 쓰였는지 확인하는 문제이다. 먼저 입력받는 값을 x, y, z 라 하고 이 값들을 모두 곱한 값을 n에 저장한다 그리고 0부터 9까지 각 수들의 사용 횟수를 세기 위한 배열 a[10]을 생성하고 값을 모두 0으로 초기화해준다. while문을 이용하여 n을 10으로 나눈 나머지를 임시변수tmp에 저장하고 a[tmp]의 값을 증가시킨다. n에 다시 n을 10으로 나눈 몫을 저장해두면 12345 -> 1234 -> 123 -> 12 -> 1 순으로 n이 저장된다. 즉 오른쪽부터 하나씩 떨어져나간다. n의 몫이 더이상 남지않아 n / 10이 0이되면 break문을 이용해 빠져나가고 다시 for문을 사용하여 a[]배열에 저장된 값들을 하나..

[C] 백준알고리즘 #2562 최댓값

9개의 자연수를 입력받고, 이 중 최댓값과 이 최댓값이 저장된 배열의 번호를 찾는 문제이다. 먼저 9개의 값이 들어갈 배열을 생성해두고 for문을 이용하여 값을 입력받는다. 그리고 입력받은 값(a[i])이 max (0으로 초기화) 값보다 큰 경우에 max에 a[i]값을 저장한다. 이 때 이 값의 번호를 알기위해 count라는 변수를 만든 후 count변수에 i+1값을 넣는다. (for문을 i = 1; i max) { max = a[i]; count = i + 1; } } printf("%d\n%d", max, count); } \n으로 줄바꿈한 후 출력하면 완성.

[C] 백준알고리즘 #1110 더하기 사이클

조건식을 반복한 후 원래의 수로 돌아오기까지의 수를 세는 문제이다. while 문을 이용하여 반복한 후 새로운 수가 원래의 수가 된다면 break를 이용하여 빠져나오면 된다. 먼저 코드를 보자 입력받을 n이 저장되는 변수 n 반복 횟수를 저장하는 count 10의자리 수를 저장할 ten 1의자리 수를 저장할 one 기존 n값을 복사해 두는 orin 총 5개의 변수를 두었다. n을 10으로 나눈 몫과 나머지 (10의자리와 1의자리)로 나눈 후 n에 (1의자리x10) + ((10의자리+1의자리)를 10으로 나눈 나머지) 를 저장해주면 된다. while문을 반복할 때마다 count를 증가시켜 주고 복사해 두었던 orin 변수와 n값이 같아지게 되면 break문으로 빠져나오면 된다. (print문은 올바르게 작..

[C] 백준알고리즘 #2445 별 찍기 - 8 (리본)

리본모양의 별을 찍어내는 문제이다. 예제출력 1의 빈칸을 보면 모래시계 모양이니 앞에서 만들었던 모래시계 코드를 가져와서 조금 수정해보도록 한다. 위는 모래시계 모양으로 별을 찍어내는 코드이다. 여기서 printf(" "); 과 printf("*"); 의 위치를 바꾸게 된다면 별@@@@@ 별별@@@ 별별별@ 별별@@@ 별@@@@@ 처럼 나오게 될 것이다. @는 빈칸을 의미한다. 그렇다면 여기에서 리본의 오른쪽 삼각형에 해당하는 부분만 더 추가해준다면 쉽게 해결할 수 있을 것이다. 오른쪽 리본에 찍히는 별의 갯수는 왼쪽 리본과 같고, 증감도 똑같으므로 각 for문을 복사해서 빈칸을 입력하는 for문 뒤에 붙여넣기 해주면 된다. 붙여넣은 다음 빈칸의 개수를 예제 출력 1과 같이 조정해주기 위해 빈칸을 입력하..

[C] 백준알고리즘 #2444 #2446 별 찍기 - 7, 9 (다이아몬드, 모래시계)

앞선 별 찍기 5와 6을 합한 문제이다. 단순히 합쳐버리게 되면 * *** ***** ***** *** * 처럼 가운데에 중복되는 줄이 생성될 수 있으므로 조건을 조금 수정해준다. 4와 6의 정답을 가져와서 이어붙였다. 다만 위와같은 문제가 생기므로 두번째 for문(별 역순으로 찍는 구문)을 조금 수정 했다. 먼저 줄을 나타내는 i의 조건식에서 i = i * 2 + 1로 변경했는데 이로인해 조건의 범위가 2만큼 줄어들게 된다. 이는 별 갯수를 2n - 1개부터 출력하는 것이 아닌 2n - 3개부터 출력하기 위해서이다. 이어서 별 찍기 - 9 문제이다. 위의 문제의 상하를 뒤바꾼 문제이기 때문에 코드의 위치만 바꾸었다. 단순히 위치만 바꾸고 그대로 실행하면 다음처럼 오답이 나오므로 코드를 조금 수정해준다...

반응형