๐ ๊ตฌํ(Implementation) ์ด๋?
์ฝ๋ฉ ํ ์คํธ์์ ๊ตฌํ์ด๋ '๋จธ๋ฆฟ์์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ค์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ณผ์ '์ด๋ค. ๊ตฌํ ๋ฌธ์ ๋ ๋ชจ๋ ๋ฒ์์ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ์ ํ์ ํฌํจํ๋ ๊ฐ๋ ์ด์ง๋ง, ๋ณดํต ํน๋ณํ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค๋ ๋ฌธ์ ๋ฅผ ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ์ฝ๋๋ก ํ์ด๋ด๋ ๋ฅ๋ ฅ + ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ ์ ํํ ์ดํด๋ฅผ ๊ฐ์ถ๊ณ ์๋์ง ๋ณด๋ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์์๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋จํ๋ฐ ์ฝ๋๊ฐ ์ง๋์น๊ฒ ๊ธธ์ด์ง๋ ๋ฌธ์
- ํน์ ์์์ ์๋ฆฌ๊น์ง ์ถ๋ ฅํด์ผ ํ๋ ๋ฌธ์
- ๋ฌธ์์ด์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋ ํ ๋ฌธ์ ๋จ์๋ก ๋์ด์ ๋ฆฌ์คํธ์ ๋ฃ์ด์ผ ํ๋ ๋ฌธ์
- ์ฌ์ํ ์กฐ๊ฑด ์ค์ ์ด ๋ง์ ๋ฌธ์
๋ณดํต ๊ตฌํ ๋ฌธ์ ๋ ์ฌ์ํ ์ ๋ ฅ ์กฐ๊ฑด ๋ฑ์ ๋ฌธ์ ์์ ๋ช ์ํด์ฃผ๋ฉฐ ๋ฌธ์ ์ ๊ธธ์ด๊ฐ ๊ฝค ๊ธด ํธ์ด๋ค. ํ์ง๋ง ๊ณ ์ฐจ์์ ์ธ ์ฌ๊ณ ๋ ฅ์ ์๊ตฌํ๋ ๋ฌธ์ ๋ ๋์ ์๋ ํธ์ด๋ผ ๋ฌธ๋ฒ์ ์ต์ํ๋ค๋ฉด ์คํ๋ ค ์ฝ๊ฒ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ฑฐ๋ ํฐ ์ ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฌธ์ ๊ฐ ์ถ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, C/C++๋ Java์์๋ ๋ฌธ์์ด ์ฒ๋ฆฌ๊ฐ ํ์ด์ฌ์ ๋นํด ๊น๋ค๋กญ๊ณ , ํฐ ์ ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณ๋๋ก ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ C/C++๋ Java๋ก ํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค.
API ๊ฐ๋ฐ ๋ฌธ์ ๋ํ ๊ตฌํ ์ ํ๊ณผ ์๋นํ ๋ง๋ฟ์ ์๋ค. ์นด์นด์ค ๊ณต์ฑ ๋ API ๊ฐ๋ฐ ๋ฌธ์ ๊ฐ ์ถ์ ๋ ์ ์ด ์๋๋ฐ, ์ด๋ ์นด์นด์ค ๋ฌธ์ ํ์ด ์๋ฒ์ ํต์ ํ๋ ํ๋ก๊ทธ๋จ ๋ชจ๋์ ์์ฑํด์ผ ํ๋ค. ์ด๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ ๋ณ๊ฐ๋ก ์น ์๋ฒ๋ ๋ฐ์ดํฐ ๋ถ์์ ๋ํ ๊ธฐ์ด ์ง์๋ ํ์ํ๋ค. ์ด๋ฐ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ ๋, C++์ด๋ Java์ ๋นํด ํ์ด์ฌ์ ๋งค์ฐ ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ด ๋ ์ ๋ฆฌํ๋ค.
(๋๋ API ๊ฐ๋ฐ ๋ฌธ์ ๋ฅผ ํ์ด๋ณธ ์ ์ด ์์ด์ ์ ๋ชจ๋ฅด๊ฒ ๋ค๐ค)
์์ ํ์๊ณผ ์๋ฎฌ๋ ์ด์ ์ ํ์ ๊ตฌํ์ด ํต์ฌ์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ์ด์ ๋ํด์๋ ์ ๊น ์์๋ณด์.
๐ ์์ ํ์์ด๋?
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฃผ์ ์์ด ๋ค ๊ณ์ฐํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ค.
๐ ์๋ฎฌ๋ ์ด์ ์ด๋?
๋ฌธ์ ์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋จ๊ณ์ฉ ์ฐจ๋ก๋๋ก ์ง์ ์ํํด์ผ ํ๋ ๋ฌธ์ ์ ํ์ด๋ค.
์ด์ ์์ ๋ฅผ ํ์ด๋ณด์.
1๏ธโฃ ์ํ์ข์ฐ
Q. (1, 1)์์ ์ถ๋ฐํด ์ ๋ ฅ๊ฐ(R, L, U, D) ๊ฐ์๋งํผ ์ด๋ํ์ ๋ ์ต์ข ์ขํ๋ฅผ ๊ตฌํ์์ค. ์ ์ฒด ๊ณต๊ฐ์ ํฌ๊ธฐ๋ (N, N)์ด๋ฉฐ, (1, 1) ~ (N, N) ๊ณต๊ฐ์ ๋ฒ์ด๋๋ ์ด๋์ ๋ฌด์ํ๋ค.
A. ์ด ์ ํ์ ์ผ๋ จ์ ๋ช ๋ น์ ๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์ฐจ๋ก๋๋ก ์ด๋์ํจ๋ค๋ ์ ์์ ์๋ฎฌ๋ ์ด์ (Simulation) ์ ํ์ผ๋ก ๋ถ๋ฅ๋๋ฉฐ, ๊ตฌํ์ด ์ค์ํ ๋ํ์ ์ธ ๋ฌธ์ ์ ํ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ์๊ตฌ์ฌํญ๋๋ก ๊ตฌํํ๋ฉด ์ฐ์ฐ ํ์๋ ์ด๋ ํ์์ ๋น๋กํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ฉฐ ๋งค์ฐ ๋๋ํ ํธ์ด๋ค.
์๋๋ ๋ด๊ฐ ์์ฑํ ์ฝ๋์ด๋ค.
๊ต์ฌ์ ๋์์๋ ๋ต์ ์์๊ฐ ๋ ์ธ๋ จ๋์์ง๋ง.. ์ง๊ธ์ ์๊ฐ์ด ์์ผ๋ ๊ณ ์น๋๊ฑด ๋์ค์ ํ๊ธฐ๋ก ํ๋ค.
package org.example.chap4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Ex4_1 {
public static void main(String[] args) throws IOException {
int x = 1, y = 1;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
while (st.hasMoreTokens()) {
String dir = st.nextToken();
if ("L".equals(dir)) y -= 1;
else if ("R".equals(dir)) y += 1;
else if ("U".equals(dir)) x -= 1;
else if ("D".equals(dir)) x += 1;
if (x < 1) x += 1;
else if (x > N) x -= 1;
else if (y < 1) y += 1;
else if (y > N) y -= 1;
}
System.out.println(x + " " + y);
}
}
2๏ธโฃ ์๊ฐ
Q. 0์ 0๋ถ 0์ด๋ถํฐ N์ 59๋ถ 59์ด๊น์ง 3์ด ๋ค์ด๊ฐ ์๊ฐ์ ๊ฐ์๋ฅผ ์ธ์์ค.
A. ์์ ํ์ ๋ฌธ์ ๋ก, ํ๋์ฉ ๋๋ฆฌ๋ฉด์ 3์ด ๋ค์ด๊ฐ๋์ง ์ฒดํฌํ๋ฉด ๋๋ค. ์ ์ฒด ๊ฒฝ์ฐ์ ์๋ 24*60*60 = 86400๊ฐ์ด๋ฏ๋ก ์์ ํ์์ด๋๋ผ๋ 1์ด ์์ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์๋๋ ์ฝ๋ ์ค ์ฃผ์์ฒ๋ฆฌํ ๋ถ๋ถ์ด ๋ด๊ฐ ์ง ์ฝ๋์ธ๋ฐ, ์ ๋ต์ด ๋ค๋ฅด๊ฒ ๋์ค๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
์ ํ๋ธ ๊ฐ์ ๋ณด๊ณ ์ด์ ๋ฅผ ์ฐพ์๋ณด๋๊ฑธ๋ก.
package org.example.chap4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Ex4_2 {
public static boolean check(int h, int m, int s) {
// h -> 1์ ์๋ฆฌ๊ฐ 3, m -> 30์ด๊ฑฐ๋ 1์ ์๋ฆฌ๊ฐ 3, s -> 30์ด๊ฑฐ๋ 1์ ์๋ฆฌ๊ฐ 3
if (h % 10 == 3 || m / 10 == 3 || m % 10 == 3 || s / 10 == 3 || s % 10 == 3)
return true;
return false;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int count = 0;
for (int i = 0; i <= N; i++) {
for (int j = 0; j < 60; j++) {
for (int k = 0; k < 60; k++) {
// String time = Integer.toString(N).concat(Integer.toString(j)).concat(Integer.toString(k));
// System.out.println(time);
// if (time.contains("3")) count++;
if (check(i, j, k)) count++;
}
}
}
System.out.println(count);
}
}
๐ ์ฐธ๊ณ ์๋ฃ