๐Ÿ“˜ TIL - ๋ฐฑ์ค€ 1032๋ฒˆ: ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ

์ด์Šน์šฑยท2025๋…„ 8์›” 4์ผ

์ž๋ฐ”์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
1/36

๐Ÿ” ์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ
๐Ÿ“Œ ๋ฌธ์ œ ๊ฐœ์š”
์œˆ๋„์šฐ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(cmd)์—์„œ dir ๋ช…๋ น์–ด๋Š” ํŠน์ • ํŒจํ„ด์— ๋งž๋Š” ํŒŒ์ผ๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด dir a?c.txt๋Š” abc.txt, acc.txt ๋“ฑ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ N๊ฐœ์˜ ํŒŒ์ผ ์ด๋ฆ„์—์„œ, ํ•ด๋‹น ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

โœ… ๋ฌธ์ œ ์กฐ๊ฑด ์ •๋ฆฌ
ํŒŒ์ผ ๊ฐœ์ˆ˜ N โ‰ค 50

ํŒŒ์ผ ๊ธธ์ด โ‰ค 50

๋ชจ๋‘ ๋™์ผํ•œ ๊ธธ์ด์˜ ํŒŒ์ผ ์ด๋ฆ„

์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์™€ ์ (.)์œผ๋กœ ๊ตฌ์„ฑ

๊ฐ€๋Šฅํ•œ ํ•œ ?๋ฅผ ์ตœ์†Œ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

๐Ÿ’ก ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต
1. ๋น„๊ต ๊ธฐ์ค€ ์„ค์ •
์ฒซ ๋ฒˆ์งธ ํŒŒ์ผ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์žก๊ณ , ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค๊ณผ ๊ฐ ๋ฌธ์ž์˜ ์œ„์น˜๋ฅผ ๋น„๊ต

  1. ๋ฌธ์ž์—ด ๋น„๊ต ๋กœ์ง
    ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ๋ชจ๋‘ ๋™์ผ โ†’ ํ•ด๋‹น ๋ฌธ์ž ์‚ฌ์šฉ

ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด โ†’ ?๋กœ ๋Œ€์ฒด

  1. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
    ์ž…๋ ฅ ํŒŒ์ผ์ด 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)
(์ถœ๋ ฅ ๋ฌธ์ž์—ด ๊ธธ์ด๋งŒํผ ์ €์žฅ)

๐Ÿ”— ๋А๋‚€ ์ 
์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ, ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์˜€๋‹ค.

์กฐ๊ฑด์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋กœ์ง์ด ํ›จ์”ฌ ๋‹จ์ˆœํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋‹ค์‹œ ๋А๊ผˆ๋‹ค.

์•ž์œผ๋กœ ๋ฌธ์ž์—ด ๊ด€๋ จ ๋ฌธ์ œ๋Š” "๊ธฐ์ค€๊ฐ’ ์„ค์ • + ์œ„์น˜๋ณ„ ๋น„๊ต" ํŒจํ„ด์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด์•ผ๊ฒ ๋‹ค.

profile
์•„๋Š”๊ฑฐ ์—†๋Š” ์ „๊ณต์ž

0๊ฐœ์˜ ๋Œ“๊ธ€