article thumbnail image
Published 2020. 11. 20. 02:15

#8888 : 시험

[코드]

SWEA 8888 코드
SWEA 8888 코드

[코드설명]

  ① main

문제의 배점, 맞힌 문제의 개수를 표현하기 위해 point와 num배열을 만들었다. score배열은 N명의 점수를 저장하기 위해, test는 N명의 테스트 결과를 저장하기 위해 만들었다.

N, T, P의 값을 입력 받았고, 나중에 getchar()를 쓸 일이 있기 때문에 getchar()를 써서 버퍼를 비웠다.

memset을 사용해서 point와 num배열을 모두 0으로 채웠다.

그리고 test는 2차원 배열로 나타내야 하는데 2차원 배열을 사용하니 Stack Overflow가 발생해서 대신 이중 포인터를 사용했다.

24번째 줄의 for문 안에서 i의 값이 증가할 때마다 test[i]에 메모리를 할당해서 2차원 배열을 표현했고, 안쪽 for문에서 getchar()로 '0'또는 '1'의 값을 받아서 ch에 저장했다. ch가 '0'이면 문제 배점을 증가시켜야 하기 때문에 point[j]의 값을 1증가시켰고, '1'이면 해당 인물의 정답 개수를 늘리고, test에 기록해야하기 때문에 num[i]을 1증가시키고, test[i][j]에 1을 대입했다.

score 합산을 위해 memset으로 score배열을 0으로 채우고, 이중 for문으로 test[i][j]가 1일 때마다 point[j]값을 score[i]에 더해줬다.

score합산이 끝나면 test는 더이상 필요 없으므로 메모리를 해제한다.

랭킹을 구할 때는 자신을 제외한 나머지와 순위 비교를 해야하기 때문에 i+1이 지학이의 번호를 가리킬 때는 비교하지 않고 다음 반복으로 넘어가야 한다.

비교대상이 지학이의 점수보다 큰 사람 또는 점수는 같지만 정답 수가 더 많은 사람 또는 점수와 정답 수가 같지만 번호가 더 작은 사람일 때마다 rank를 1증가시킨다.

 

[실행결과]

SWEA 8888 실행결과

 

 

 

#8840 : 아바바바

[코드]

SWEA 8840 코드

[코드설명]

  ① main

문제에서 L의 범위가 10억까지이므로 자료형을 long으로 선택했다.

문제를 잘 보면 회문 개수 사이에 규칙이 있는 것을 알 수 있다.

L이 3일 때 1, 5일 때 4, 7일 때 9, ... 이런 식으로 쭉쭉 진행하면 결과값이 제곱수라는 것을 알 수 있다. 이 규칙을 수식으로 표현하면 다음과 같다. (L-1/2)^2

 

[실행결과]

SWEA 8840 실행결과

'알고리즘' 카테고리의 다른 글

[BOJ] 10809/10773  (0) 2021.01.07
[SWEA] 8821/8741  (0) 2020.11.28
[SWEA] 10912/9229  (0) 2020.11.11
[SWEA] 10059/9700  (0) 2020.11.06
[SWEA] 9317/10804  (0) 2020.10.31
복사했습니다!