์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ๋ต ๋น์จ |
2 ์ด | 512 MB | 49.598% |
๋ฐฉ๋ฒ
ํฑ๋๋ฐํด๋ค์ gears ๋ผ๋ ๋ฐฐ์ด์ ์ ์ฅํด ๋๊ณ ํ์ ์ํฌ ํฑ๋๋ฐํด๋ฅผ gear ๋ผ๊ณ ํ์ ๋, gear ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ํฑ๋๋ฐํด๋ค๊ณผ ์ค๋ฅธ์ชฝ ํฑ๋๋ฐํด๋ค์ ๋๋ ์ ์ฒ๋ฆฌํ ๋ค์ ๋ง์ง๋ง์ gear ๋ฒ์งธ ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํค๋๋ก ํ์๋ค.
์๋ฎฌ๋ ์ด์ ๋ฌธ์ ๋ต๊ฒ ํ์ ํ ๋๋ง๋ค ๋ฐฐ์ด์ ์์ ํ ์ ์์ง๋ง ๊ฐ์ฅ ๋จผ์ ๋ ์ฌ๋๋ '์ธ๋ฑ์ค๋ก ์ ๊ทผ'ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ์๋ค. 4๊ฐ์ ๋ฐํด์ 12์ ๋ฐฉํฅ์ ์ ์ฅํด๋๋ ๋ฐฐ์ด idx[] ๋ฅผ ๋์ด, ํ์ ํ ๋๋ง๋ค idx[ํฑ๋๋ฐํด ๋ฒํธ]๋ฅผ ๊ฐฑ์ ์์ผฐ๋ค.
- ์๊ณ๋ฐฉํฅ์ด๋ผ๋ฉด idx[gear] = (idx[gear]+7) % 8;
- ๋ฐ ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์ ์ด๋ผ๋ฉด idx[gear] = (idx[gear]+1) % 8;
๋๋จธ์ง ์ฐ์ฐ์๋ฅผ ์ฐ๋ ์ด์ ๋ ์กฐ๊ฑด๋ฌธ ์์ด ๋ฐ๋ก ๊ฐฑ์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
1116 KB | 0 ms |
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
|
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int gears[5][10], idx[5], t, gear, dir, preidx, predir, ans;
char c[10];
int main(){
memset(gears, -1, sizeof(gears));
for (int i = 0; i < 4; i++) {
scanf("%s", c);
for (int j = 0; j < 8; j++) {
gears[i][j] = c[j] - '0';
}
}
for (int i = 0; i < 4; i++) idx[i] = 0; // 12์ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ 0์ผ๋ก ์ด๊ธฐํ.
scanf("%d", &t);
while (t--) {
scanf("%d %d", &gear, &dir);
// ๊ฐ์ง ์์ผ๋ฉด ๋์๊ฐ.
if (gear > 1 && gears[gear - 1][(idx[gear - 1] + 6) % 8] != gears[gear - 2][(idx[gear - 2] + 2) % 8]) {
predir = dir;
for (int i = gear - 2; i >= 0; i--) {
preidx = idx[i];
if (predir == 1) { // ์ด์ ์ด ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 1) % 8;
predir = -1;
}
else { // ์ด์ ์ด ๋ฐ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 7) % 8;
predir = 1;
}
// preidx ์ ์ผ์ชฝ ํฑ๋๋ฐํด๋ฅผ ๋น๊ต.
if (gears[i][(preidx + 6) % 8] == gears[i - 1][(idx[i - 1] + 2) % 8]) break;
}
}
if (gear < 4 && gears[gear - 1][(idx[gear - 1] + 2) % 8] != gears[gear][(idx[gear] + 6) % 8]) {
predir = dir;
for (int i = gear; i <= 3; i++) {
preidx = idx[i];
if (predir == 1) { // ์ด์ ์ด ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 1) % 8;
predir = -1;
}
else { // ์ด์ ์ด ๋ฐ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 7) % 8;
predir = 1;
}
// preidx ์ ์ค๋ฅธ์ชฝ ํฑ๋๋ฐํด๋ฅผ ๋น๊ต.
if (gears[i][(preidx + 2) % 8] == gears[i + 1][(idx[i + 1] + 6) % 8]) break; // ์์ชฝ ๋ ๋ถ๋ถ๋ ๋์๊ฐ๊ฒ ํ๊ธฐ ์ํ์ฌ -1๋ก ์ด๊ธฐํ ์์ผ๋๊ณ ๊ฐ์์ง๋ก ํ๋ณ.
}
}
// gear -1 ๋ฒ์งธ ํฑ๋ idx ๋ณ๊ฒฝ.
if (dir == 1) { // ์๊ณ๋ฐฉํฅ
idx[gear - 1] = (idx[gear - 1] + 7) % 8;
}
else { // ๋ฐ์๊ณ๋ฐฉํฅ
idx[gear - 1] = (idx[gear - 1] + 1) % 8;
}
}
int sq = 1;
for (int i = 0; i < 4; i++) { // S๊ทน ์ 1๋ก ๋ํ๋์๊ณ
ans += gears[i][idx[i]] * sq; sq *= 2;
}
printf("%d", ans);
return 0;
}
|
cs |
์ ๋ ฅ์ด ๋์ด์ฐ๊ธฐ ์์ด ์ฃผ์ด์ง๋ ๋ถ๋ถ์ ๋ฌธ์์ด๋ก ๋ฐ์ int๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ํํ๋๋ฐ, ํ์์ง์ ์๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ gears ๋ฐฐ์ด์ 1๋ฒ์งธ ์ธ๋ฑ์ค์์๋ถํฐ ๋ฃ์ด ์ข ๋ ์ง๊ด์ ์ด๋๋ก ๋ฐ๊ฟ๋ณด์๋ค.
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
|
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int gears[5][10], idx[5], t, gear, dir, preidx, predir, ans;
int main(){
memset(gears, -1, sizeof(gears));
for (int i = 1; i <= 4; i++) {
for (int j = 0; j < 8; j++) {
scanf("%1d", &gears[i][j]);
}
}
scanf("%d", &t);
while (t--) {
scanf("%d %d", &gear, &dir);
// ์ผ์ชฝ ํฑ๋๋ฐํด
if (gears[gear][(idx[gear] + 6) % 8] != gears[gear - 1][(idx[gear - 1] + 2) % 8]) {
predir = dir;
for (int i = gear -1; i > 0; i--) {
preidx = idx[i];
if (predir == 1) { // ์ด์ ์ด ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 1) % 8; predir = -1;
}
else { // ์ด์ ์ด ๋ฐ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 7) % 8; predir = 1;
}
// preidx ์ ์ผ์ชฝ ํฑ๋๋ฐํด๋ฅผ ๋น๊ต.
if (gears[i][(preidx + 6) % 8] == gears[i - 1][(idx[i - 1] + 2) % 8]) break;
}
}
// ์ค๋ฅธ์ชฝ ํฑ๋๋ฐํด
if (gears[gear][(idx[gear] + 2) % 8] != gears[gear+1][(idx[gear+1] + 6) % 8]) {
predir = dir;
for (int i = gear + 1; i <= 4; i++) {
preidx = idx[i];
if (predir == 1) { // ์ด์ ์ด ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 1) % 8;
predir = -1;
}
else { // ์ด์ ์ด ๋ฐ์๊ณ๋ฐฉํฅ์ด์๋ค๋ฉด ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์์ผํจ.
idx[i] = (idx[i] + 7) % 8;
predir = 1;
}
// preidx ์ ์ค๋ฅธ์ชฝ ํฑ๋๋ฐํด๋ฅผ ๋น๊ต.
if (gears[i][(preidx + 2) % 8] == gears[i + 1][(idx[i + 1] + 6) % 8]) break; // ์์ชฝ ๋ ๋ถ๋ถ๋ ๋์๊ฐ๊ฒ ํ๊ธฐ ์ํ์ฌ -1๋ก ์ด๊ธฐํ ์์ผ๋๊ณ ๊ฐ์์ง๋ก ํ๋ณ.
}
}
// gear ๋ฒ์งธ ํฑ๋ 12์ ๋ฐฉํฅ idx ๋ณ๊ฒฝ.
if (dir == 1) { // ์๊ณ๋ฐฉํฅ
idx[gear] = (idx[gear] + 7) % 8;
}
else { // ๋ฐ์๊ณ๋ฐฉํฅ
idx[gear] = (idx[gear] + 1) % 8;
}
}
int sq = 1;
for (int i = 1; i <= 4; i++) { // S๊ทน ์ 1
ans += gears[i][idx[i]] * sq; sq *= 2;
}
printf("%d", ans);
return 0;
}
|
cs |
'๐ฅ PS(Problem Solving) ๐ฅ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #1149 RGB ๊ฑฐ๋ฆฌ (0) | 2019.10.02 |
---|---|
[BOJ] #1010 ๋ค๋ฆฌ๋๊ธฐ (0) | 2019.10.02 |
[BOJ] #14889 ์คํํธ์ ๋งํฌ (0) | 2019.10.02 |
[BOJ] #3190 ๋ฑ (0) | 2019.09.29 |
[BOJ] #16929 Two Dots (0) | 2019.09.29 |
๋๊ธ