SW Expert Academy 민석이의 과제 체크하기 문제풀이. 공교롭게도 처음 푼 레벨3 문제 2개가 모두 쉬웠다. 자신감을 더욱 상승시켜준 문제. 꾸준히 준비하면 삼성 역량 테스트도 충분히 도전해볼만 하겠다.
문제
과제를 제출하지 않은 사람의 번호를 오름차순으로 출력하는 프로그램을 작성하라. |
풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <stdio.h> #include <malloc.h> int main() { int tc; scanf("%d", &tc); for (int t = 0; t < tc; t++) { int n, k; scanf("%d %d", &n, &k); int* students; students = (int*)malloc(sizeof(int)*n); for (int i = 0; i < n; i++) { students[i] = '\0'; } int* submitter; submitter = (int*)malloc(sizeof(int)*k); for (int i = 0; i < k; i++) { scanf("%d", &submitter[i]); } for (int i = 0; i < k; i++) { students[submitter[i]-1] = submitter[i]; } printf("#%d ", t + 1); for (int i = 0; i < n; i++) { if (students[i] == NULL) { printf("%d ", i+1); } } printf("\n"); } return 0; } | cs |
먼저 1번부터 n번까지 학생의 명단을 의미하는 students 배열을 동적할당으로 만들어준다. 각 요소는 null 값으로 초기화해준다.
과제를 제출한 학생의 명단인 submitter를 동적할당으로 k 크기만큼 만든다. for문을 돌려 학생의 번호를 입력받는다. 을 입력받는다.
k만큼 루프를 돌려 students 명단의 제출한 학생의 위치를 제출한 학생 번호로 채워준다. 학생 번호가 4면 students내에서의 인덱스는 3이다(0,1,2,3). 그러니 students[submitter[i]-1] = submitter[i]가 된다. 사실 students에 입력될 값은 null만 아니면 된다. 1이 더 깔끔하겠다.
그럼 students 명단에서 제출한 학생 번호의 인덱스는 어떤 값이 들어가 있을 것이고 제출하지 않은 학생 번호의 인덱스는 여전히 null일 것이다. 예를 들어 5명의 학생 중 2,4번이 제출했다면 null, 2, null, 5, null이 인덱스 0,1,2,3,4에 각각 들어가 있을 것이다.
그럼 다시 students를 루프 돌려서 배열 요소 하나씩 접근한다. 인덱스의 값이 null 이면 인덱스+1을 출력하면 그게 제출 안 한 학생의 번호다.
루프를 돌려 i=0부터 증가하므로 자연스럽게 오름차순으로 출력된다.
'DEVELOP > Algorithm' 카테고리의 다른 글
[Python] 백준 알고리즘 문제풀이 :: 1094번 (0) | 2018.09.22 |
---|---|
[C] SW Expert Academy 문제풀이 :: 1954번 (0) | 2018.09.20 |
[C] SW Expert Academy 문제풀이 :: 1961번 (0) | 2018.09.19 |
[C] SW Expert Academy 문제풀이 :: 1966 번 (0) | 2018.09.17 |
[C] SW Expert Academy 문제풀이 :: 5356번 (0) | 2018.09.13 |
[C] SW Expert Academy 문제풀이 :: 1989번 (0) | 2018.09.12 |
[C] SW Expert Academy 문제풀이 :: 1970번 (0) | 2018.09.11 |
[C] SW Expert Academy 문제풀이 :: 2001번 (0) | 2018.09.08 |