728x90
반응형
[삼성 SDS 알고리즘] 쉬어가는 페이지
지난 일요일 사전테스트가 종료되었습니다. 테스트기간동안 푼 문제 해결방법을 포스팅하려고 합니다.
문제 출처 : https://koitp.org/problem/SDS_TEST_PAGE/read/
계획 및 분석
총 전체 페이지가 최대 10000쪽까지 가능하므로, 배열을 10001개로 만들어 생성해야겠다고 생각했습니다.
이때 페이지 수, 시작 페이지, 건너뛰는 페이지 수, 쉬는 페이지를 각각 입력하게 되는데, 테스트케이스마다 따로 저장하기 위해 모두 배열로 선언하고 시작했습니다. 배열의 수는 제한조건에 맞춰서 조금 여유롭게 만들었습니다.
int T, N[10001], S[10001], J[10001], K[1010];
int rest[1010];
int count[1010] = { 0 };
count 배열은, 쉬어가는 페이지의 수를 저장할 곳으로 만들었습니다.
테스트케이스로 입력한 수만큼 for문을 돌려 반복시키고, 시작 페이지가 페이지 수보다 작은 동안 쉬어가는 페이지와 일치할 때마다 count를 증가시키며 저장하게 되었습니다. 건너뛰는 수는 J[i] 배열이므로, 한번 while문이 진행되면 시작 페이지 배열에 해당하는 S[i]를 증가시키는 방법을 이용했습니다.
전체 소스 코드
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 <iostream> using namespace std; int main() { int T, N[10001], S[10001], J[10001], K[1010]; int rest[1010]; int count[1010] = { 0 }; cin >> T; // testcase for (int i = 1; i <= T; i++) { cin >> N[i] >> S[i] >> J[i] >> K[i]; // 페이지 수, 시작, 건너뜀, 쉼 for (int j = 1; j <= K[i]; j++) { cin >> rest[j]; } int allBook = N[i]; int startBook = S[i]; while (S[i] <= N[i]) { for (int z = 1; z <= K[i]; z++) { if (S[i] == rest[z]) count[i] += 1; } S[i] += (J[i] + 1); } } for (int q = 1; q <= T; q++) { cout << "#" << q << " " << count[q] << endl; } } | cs |
728x90
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 베스트앨범 (Java) (3) | 2019.09.27 |
---|---|
[알고리즘] 배열 회전 프로그램 (0) | 2018.11.12 |
[삼성 SDS 알고리즘 사전테스트] 순환공간 (0) | 2018.07.26 |
[삼성 SDS 알고리즘 사전테스트] 마지막 생존자 (0) | 2018.07.26 |
[삼성 SDS 알고리즘] 가장 많은 수 (0) | 2018.07.19 |