๐ ์ค๋ ๋ฐฐ์ด ๊ฒ
๐ ๋ฌธ์ ๊ฐ์
์๋์ฐ ๋ช
๋ น ํ๋กฌํํธ(cmd)์์ dir ๋ช
๋ น์ด๋ ํน์ ํจํด์ ๋ง๋ ํ์ผ๋ง ์ถ๋ ฅํฉ๋๋ค.
์๋ฅผ ๋ค์ด dir a?c.txt๋ abc.txt, acc.txt ๋ฑ์ ์ฐพ์ต๋๋ค.
์ฃผ์ด์ง N๊ฐ์ ํ์ผ ์ด๋ฆ์์, ํด๋น ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋ ํจํด ๋ฌธ์์ด์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
โ
๋ฌธ์ ์กฐ๊ฑด ์ ๋ฆฌ
ํ์ผ ๊ฐ์ N โค 50
ํ์ผ ๊ธธ์ด โค 50
๋ชจ๋ ๋์ผํ ๊ธธ์ด์ ํ์ผ ์ด๋ฆ
์ํ๋ฒณ ์๋ฌธ์์ ์ (.)์ผ๋ก ๊ตฌ์ฑ
๊ฐ๋ฅํ ํ ?๋ฅผ ์ต์๋ก ์ฌ์ฉํด์ผ ํจ
๐ก ๋ฌธ์ ํด๊ฒฐ ์ ๋ต
1. ๋น๊ต ๊ธฐ์ค ์ค์
์ฒซ ๋ฒ์งธ ํ์ผ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ์ก๊ณ , ๋ค๋ฅธ ํ์ผ๋ค๊ณผ ๊ฐ ๋ฌธ์์ ์์น๋ฅผ ๋น๊ต
ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด โ ?๋ก ๋์ฒด
๐ง ๋ฐฐ์ด ์
๋ฌธ์์ด ๋ฌธ์ ๋ ์์น ๊ธฐ์ค ๋น๊ต๋ก ํด๊ฒฐํ๋ ๋ฐฉ์์ด ์ ์ฉํ๋ค.
๋น๊ต ์ ๊ธฐ์ค ๋ฌธ์์ด์ ํ๋ ์ ํด๋๋ฉด ๋น๊ต ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
Scanner๋ณด๋ค BufferedReader๊ฐ ์๋ ๋ฉด์์ ์ ๋ฆฌํ๋ค (์ ๋ ฅ์ด ๋ง์ ๋ ํนํ ์ค์).
์๋ฐ์์ ๋ฌธ์ ๋น๊ต๋ charAt(i)๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ์ง๊ด์ ์ด๊ณ ํจ์จ์ ์ด๋ค.
๋ฌธ์์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ๋ StringBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐งโ๐ป ์ฌ์ฉํ ์ฝ๋ ์์ฝ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] files = new String[n];
for (int i = 0; i < n; i++) {
files[i] = br.readLine();
}
if (n == 1) {
System.out.println(files[0]);
return;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < files[0].length(); i++) {
char ch = files[0].charAt(i);
boolean same = true;
for (int j = 1; j < n; j++) {
if (files[j].charAt(i) != ch) {
same = false;
break;
}
}
sb.append(same ? ch : '?');
}
System.out.println(sb.toString());
โฑ๏ธ ๋ณต์ก๋ ๋ถ์
์๊ฐ ๋ณต์ก๋: O(N ร L)
(N = ํ์ผ ์, L = ๋ฌธ์์ด ๊ธธ์ด)
๊ณต๊ฐ ๋ณต์ก๋: O(L)
(์ถ๋ ฅ ๋ฌธ์์ด ๊ธธ์ด๋งํผ ์ ์ฅ)
๐ ๋๋ ์
์ฒ์์๋ ๋จ์ํ ๋ฌธ์์ด ํ๋์ฉ ๋น๊ตํ๋ ๊ฒ ๋นํจ์จ์ ์ผ ๊ฒ ๊ฐ์์ง๋ง, ๋ฌธ์์ด ๊ธธ์ด๊ฐ ๊ณ ์ ๋์ด ์์ด ์ถฉ๋ถํ ๊ฐ๋ฅํ ๋ฌธ์ ์๋ค.
์กฐ๊ฑด์ ์ ํ์ฉํ๋ฉด ๋ก์ง์ด ํจ์ฌ ๋จ์ํด์ง ์ ์๋ค๋ ์ ์ ๋ค์ ๋๊ผ๋ค.
์์ผ๋ก ๋ฌธ์์ด ๊ด๋ จ ๋ฌธ์ ๋ "๊ธฐ์ค๊ฐ ์ค์ + ์์น๋ณ ๋น๊ต" ํจํด์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํด์ผ๊ฒ ๋ค.