Posts 20055 Samsung sw test
Post
Cancel

20055 Samsung sw test

20055 Samsung sw test

알고리즘 (구현)

1
2
3
1. durability와 isThereRobot 변수로 구성된 Cell 구조체로 컨베이어 벨트를 만듦
2. 무한 루프 안에서, 이동시키고 -> 내리는 위치 로봇빼고 -> 로봇이동 시키고(이동시 내구도 1감소) -> 내리는 위치 로봇빼고 -> 올리는 위치 로봇 올리고(내구도 1감소)
	-> 내구도 0인 칸이 한계점에 닿으면 종료

기타

1
1. 매번 내구도 0인 칸이 몇개인지 세기보단, 내구도를 깎는 칸에 깎고나서 내구도 0이면 count++를 하여, count가 한계점에 닿는지 확인하는 편이 훨씬 빠르게 할 수 있다.

코드

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#define MAX_WIDTH 100

using namespace std;

typedef struct Cell {
	int durability;
	bool robot;
} Cell;

Cell belt[2][MAX_WIDTH];
int width, maxDurability;

int getLastSecond();
bool checkDurability();

int main() {
	cin >> width >> maxDurability;
	for (int i = 0; i < width; i++) {
		cin >> belt[0][i].durability;
		belt[0][i].robot = false;
	}
	for (int i = width - 1; i >= 0; i--) {
		cin >> belt[1][i].durability;
		belt[1][i].robot = false;
	}

	cout << getLastSecond();
}

int getLastSecond() {
	int second = 0;
	int zero = 0;
	while (true) {
		second++;
		//벨트 한칸 씩 이동
		Cell temp = belt[0][0];
		for (int i = 1; i < width; i++) {
			Cell temp2 = belt[0][i];
			belt[0][i] = temp;
			temp = temp2;
		}
		for (int i = width - 1; i >= 0; i--) {
			Cell temp2 = belt[1][i];
			belt[1][i] = temp;
			temp = temp2;
		}
		belt[0][0] = temp;
		belt[0][width - 1].robot = false;

		//로봇 이동
		for (int i = width - 2; i >= 0; i--) {
			if (belt[0][i].robot) {
				if (!belt[0][i + 1].robot && belt[0][i + 1].durability > 0) {
					belt[0][i + 1].robot = true;
					belt[0][i + 1].durability--;
					if (belt[0][i + 1].durability == 0)
						zero++;
					belt[0][i].robot = false;
				}
			}
		}
		belt[0][width - 1].robot = false;

		//로봇 올리기
		if (!belt[0][0].robot && belt[0][0].durability > 0) {
			belt[0][0].durability--;
			if (belt[0][0].durability == 0)
				zero++;
			belt[0][0].robot = true;
		}

		//체크
		if (zero >= maxDurability)
			break;
	}

	return second;
}
This post is licensed under CC BY 4.0 by the author.

1987 Alphabet

2056 task

Comments powered by Disqus.