๐ ๋ฐฑ์ค 2034 ๋ฌธ์ https://www.acmicpc.net/problem/2034
๋ฌธ์
์์ ์์ ์ ์๊ณ๋ ๋๋ ๋ฏธํ์๋ผ์์ ์น ์๊ณ์ด๋ค. ๊ฐ๊ฐ์ ์์ ์ฐจ๋ก๋ก ์์ด ์ํ๋ฒณ CDEFGAB์ ๋์๋๋ค(๋๋ค๋ ๋ผ๋ฏธ๋งํ๋ฐ์์ฌ๋ผ๊ฐ์๋๋๋ค๋ฅผ ์๊ฐํ๋ฉด ๋จ). ์ด ๋ฌธ์ ์์๋ ์ด๋ฌํ ์ผ๊ณฑ ์๋ง์ ๋ค๋ฃจ๊ธฐ๋ก ํ๋ค.
ํ์ง๋ง ๋ชจ๋ ์์ด ์ด ์ผ๊ณฑ์ผ๋ก๋ง ๊ตฌ์ฑ๋ ๊ฒ์ ์๋๋ค. ํผ์๋ ธ์๋ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฒ์ ๊ฑด๋ฐ์ด ์์ผ๋ฉฐ, ๊ฒ์ ๊ฑด๋ฐ์ ์ธ์ ํ ํฐ ๊ฑด๋ฐ๊ณผ ๋ฐ์์ ์ฐจ์ด๊ฐ ๋๋ค. ์ฆ, C์ D ์ฌ์ด์ ์๋ ๊ฒ์ ๊ฑด๋ฐ์ C, D์ ๋ฐ์ ์ฐจ์ด๊ฐ ๋๋ค. ๊ฒ์ ๊ฑด๋ฐ์ด ์ฌ์ด์ ์๋ ๊ฒฝ์ฐ์๋, ๋ถ์ด ์๋ ๋ ํฐ ๊ฑด๋ฐ์ด ๋ฐ์ ์ฐจ์ด๊ฐ ๋๋ค. ์๋ฅผ ๋ค์ด B, C ๋ ๋ฐ์ ์ฐจ์ด๊ฐ ๋๋ฉฐ, E, F๋ ๋ฐ์ ์ฐจ์ด๊ฐ ๋๋ค.
์ด๋ฌํ ๋ฐ์ ์ฐจ์ด๋ฅผ ์ด์ฉํ์ฌ, ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ํ ์ ์๋ค. F๋ก๋ถํฐ -1๋งํผ ๋จ์ด์ง (์ผ์ชฝ์ผ๋ก ๋ฐ์) ์์ E์ด๊ณ , F๋ก๋ถํฐ 4๋งํผ ๋จ์ด์ง(์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ ๋ค ๋ฒ) ์์ A์ด๋ค. ์ด ๋ฌธ์ ์์๋ ์น ์(ํฐ ๊ฑด๋ฐ)๋ง์ ๋ฐ์ง๋ฏ๋ก, F๋ก๋ถํฐ 1๋งํผ ๋จ์ด์ง ์์ ์๋ค.
์ด๋ฌํ ๊ฑฐ๋ฆฌ๋ค์ ๋ชจ์ผ๋ฉด ํ๋์ ์ ๋ณด๊ฐ ๋๋ค. ์๋ฅผ ๋ค์ด 2 2 1 2 2 2 1๊ณผ ๊ฐ์ ์ ๋ณด๋, ์ฐจ๋ก๋ก CDEFGABC๋ฅผ ๋๋ฅด๋ ์ ๋ณด์ด๋ค. ์ฆ, ์ด ์ ๋ณด๋ ์ฒซ ์์ด C์ด๊ณ ๋ ์์ด C์ธ ์ ๋ณด๊ฐ ๋๋ค. ํ์ง๋ง ์ด ์ ๋ณด๋ ์ฒซ ์์ด D์ผ ์๋ ์๋๋ฐ, ๊ทธ ๊ฒฝ์ฐ DE ๋ค์์ ๊ฒ์ ๊ฑด๋ฐ์ด ๋๋ฆฌ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ๋ฅํ ์ฒซ ์๊ณผ ๋ ์์ ์์ ๋ชจ๋ ๊ตฌํด๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ํผ์๋ ธ๋ ์ข์ฐ๋ก ๋ฌดํํ ๊ธธ๋ค๊ณ ๊ฐ์ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ณด์ ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ ์ ์ n(1 โค n โค 10,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ n๊ฐ์ ์ค์๋ ์ ๋๊ฐ์ด 20์ ๋๊ธฐ์ง ์๋ ์ ์๋ก ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ก๋ถํฐ ์ฐจ๋ก๋ก ์ฒซ ์๊ณผ ๋ ์์ ์ถ๋ ฅํ๋ค. ์ฌ๋ฌ ๊ฒฝ์ฐ๊ฐ ๊ฐ๋ฅํ ๋์๋ ์ํ๋ฒณ์ด ์์ ๊ฒฝ์ฐ๋ถํฐ ์ถ๋ ฅํ๋ค,
ํ์ด
์ผ๋จ.. ๋งค์ฐ ์ด๋ ค์ด ๋ฌธ์ ๋ก ๋๊ปด์ก๋ค.
๊ทธ๋๋ ์ฒ์ฒํ ํ๋์ฉ ํ์ด๋ณด๊ธฐ ์์ํ๊ณ ์ฒ์ ํต๊ณผํ ์ฝ๋๋ ๊ทธ์ผ๋ง๋ก ๋์ฅํ..์ด์๋ค.
๋จผ์ , ์๊ฐ ์ ํ์ด ์์ผ๋ BufferedReader๋ก ์ ๋ ฅ์ ๋ฐ๊ธฐ๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ scale์ด๋ผ๋ ๋ฆฌ์คํธ์ ์์ด ์๊ณ๋ฅผ ๋ฃ์ด์คฌ๋๋ฐ, ๊ทธ๋ฅ ๋ฃ์ด์ฃผ์ง ์๊ณ ๋ฐ์ ์ฌ๋ ธ์ ๋ ๊ฒ์ ๊ฑด๋ฐ์ด๋ผ๋ฉด null๊ฐ์ ๋ฃ์ด์ฃผ์๋ค.
๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ๋, ์ฒซ ์๊ณผ ๋ ์์ ์ถ๋ ฅํด์ผํ๊ณ , ์ฌ๋ฌ ๊ฒฝ์ฐ๊ฐ ๊ฐ๋ฅํ ๋ ์ํ๋ฒณ์ด ์์ ์์ผ๋ก ์ ๋ ฌํด์ผํ๊ธฐ์ HashMap์ ์ ์ธํด์ฃผ์๋ค.
๊ทธ ํ, for๋ฌธ์ ๋๋ฆฌ๋ฉด์ ๊ฐ ์๊ณ๋ง๋ค ์ ๋ ฅ๋ค์ด์จ ์ ๋ณด๋งํผ ์ด๋์ ์์ผ์ฃผ์๋ค.
๋ฆฌํฉํ ๋ง ์
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
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<String> scale = Arrays.asList("C", null, "D", null, "E", "F", null, "G", null, "A", null, "B");
Map<String, String> result = new HashMap<>();
int n = Integer.parseInt(br.readLine());
int[] play = new int[n];
for (int k = 0; k < n; k++) play[k] = Integer.parseInt(br.readLine());
for (int i = 0; i < scale.size(); i++) {
// ์
๋ณด๋ฅผ ๋ฐ๋ผ ์ด๋ํ ์
int sum = i;
// ์์ ์์ด ๊ฒ์ ๊ฑด๋ฐ์ผ ๊ฒฝ์ฐ ๋ฐ ๋ก์ง์ ์คํํ์ง ์๋๋ค
if (scale.get(i) == null) continue;
for (int j = 0; j < n; j++) {
// sum์ด ์๊ณ list์ ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋๋์ง ํ์ธํ๋ค
sum = sumSize(sum + play[j], scale.size());
if (sum >= scale.size()) sum = sumSize(sum, scale.size());
else if (sum < 0) sum = sumSize(sum, scale.size());
// ์์ด ๋์ฐฉํ ์ง์ ์ด ๊ฒ์ ๊ฑด๋ฐ์ผ ๊ฒฝ์ฐ ํด๋น for๋ฌธ์ ๋ฒ์ด๋๋ค
if (scale.get(sum) == null) break;
}
// ๋ ์์ด ๊ฒ์ ๊ฑด๋ฐ์ผ ๊ฒฝ์ฐ ๋ฐ ๋ก์ง์ ์คํํ์ง ์๋๋ค
if (scale.get(sum) == null) continue;
// ์ฒซ ์, ๋ ์์ด ๋ชจ๋ ํฐ ๊ฑด๋ฐ์ด๋ผ๋ฉด hashmap์ ๋ฃ๋๋ค
result.put(scale.get(i), scale.get(sum));
}
// hashmap์ ์ฒซ ์์ ๊บผ๋ด์ด ์์ ์์ผ๋ก ์ ๋ ฌ์์ผ์ค๋ค
Object[] mapKey = result.keySet().toArray();
Arrays.sort(mapKey);
// ์ ๋ ฌ์ํจ ์ฒซ ์์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅํ๋ค
for (Object key : mapKey) {
System.out.println(key + " " + result.get(String.valueOf(key)));
}
}
// sum์ ํฌ๊ธฐ๊ฐ scale์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋
public static int sumSize(int sum, int size) {
if (sum >= size) sum -= size;
else if (sum < 0) sum += size;
return sum;
}
}
์ผ๋จ ๋ฆฌํฉํ ๋ง ์ ์ฝ๋๋ ๋ฑ ๋ด๋ ๋์กํ๋ค.
๋ฆฌํฉํ ๋ง์ ํ๊ธฐ ์ํด ์์ ํ ๋ถ๋ถ์ ์ถ๋ ค๋ณด์๋ค.
scale์ ๊ตณ์ด list๋ก ํ ํ์๊ฐ ์๋ค. ๋ค๋ฅธ ํ์ ์ ์ฌ์ฉํด๋ณด์.
scale์ C๋ถํฐ ์์ํ์ฌ ์ ๋ ฌ์ด ํ์ํ์ผ๋ A๋ถํฐ ์์ํ๋ค๋ฉด ๊ตณ์ด ์ ๋ ฌ์ ํ ํ์๊ฐ ์์ด์ง๋ค.
null๋ก ๊ฒ์ ๊ฑด๋ฐ์ ํ์ธํด์ผํ ๊น? ์์น๋ก ํ์ธํ ์๋ ์์๊น?
์ด์ฐจํผ scale์ ๊ธธ์ด๋ 12๋ก ๊ณ ์ ๋์ด์๋๋ฐ ๊ตณ์ด length?
๋ฐ๋ณต๋๋ ์ฐ์ฐ์ด ์กด์ฌํ๋๋ฐ ์ฌ๊ท๋ฅผ ์ฌ์ฉํด๋ณด๋๊ฑด ์ด๋จ๊น
BufferedWriter๋ก ์๊ฐ์ ๋ ๋จ์ถ์์ผ๋ณด์
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
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// ๋ฆฌ์คํธ๋ฅผ String ํ์
์ผ๋ก ๋ณ๊ฒฝํ์๋ค
String scale = "A_BC_D_EF_G_";
// ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ด๊ธฐ ์ํด ํฐ ๊ฑด๋ฐ์ ์์น๋ฅผ ๋ฆฌ์คํธ๋ก ์ ์ธํด๋์๋ค
List<Integer> pos = Arrays.asList(0, 2, 3, 5, 7, 8, 10);
int n = Integer.parseInt(br.readLine());
int[] play = new int[n];
for (int k = 0; k < n; k++) play[k] = Integer.parseInt(br.readLine());
for (int i = 0; i < 12; i++) {
int sum = i;
// ์ ์ธํ ์์น ๋ฆฌ์คํธ๋ฅผ ํตํด ์ฒซ ์์ด ํฐ ๊ฑด๋ฐ ์์น๊ฐ ์๋๋ผ๋ฉด ๋ค์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋์ด๊ฐ๋ค
if (!pos.contains(i)) continue;
for (int j = 0; j < n; j++) {
sum = sumSize(sumLen(sum + play[j])); // ์ฌ๊ท
// ์ ์ธํ ์์น ๋ฆฌ์คํธ๋ฅผ ํตํด ๋ง์ง๋ง ์์ด ํฐ ๊ฑด๋ฐ ์์น๊ฐ ์๋๋ผ๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋์จ๋ค
if (!pos.contains(sum)) break;
}
// ์ ์ธํ ์์น ๋ฆฌ์คํธ๋ฅผ ํตํด ๋ง์ง๋ง ์์ด ํฐ ๊ฑด๋ฐ ์์น๊ฐ ์๋๋ผ๋ฉด ๋ค์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋์ด๊ฐ๋ค
if (!pos.contains(sum)) continue;
bw.write(scale.charAt(i) + " "
+ scale.charAt(sum) + "\n");
}
bw.close();
}
private static int sumSize(int sum) {
// ์ฌ๊ท ํ์ถ์กฐ๊ฑด
// ์ด๋ํ ์์ด scale์ ๋ฒ์๋ฅผ ๋์ด๊ฐ์ง ์์ผ๋ฉด ์ฌ๊ท๋ฅผ ํ์ถํ๋ค
if (sum < 12 && sum >= 0) {
return sum;
}
if (sum < 0) sum = sumSize(sum + 12);
if (sum >= 12) sum = sumSize(sum - 12);
return sum;
}
// ์ฌ๊ท ๋์
์ , ์ฒ์์ ํ์ํ ์ฐ์ฐ์ ํด ์ค๋ค
private static int sumLen(int sum) {
if (sum >= 12) sum -= 12;
if (sum < 0) sum += 12;
return sum;
}
}