๐Ÿ” ๋ฌธ์ œ๋งํฌ

https://www.acmicpc.net/problem/1316


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

  • ๊ทธ๋ฃน ๋‹จ์–ด: ๊ฐ™์€ ๋ฌธ์ž๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋‚˜์˜ค๋Š” ๋‹จ์–ด.
aba โŒ (a๊ฐ€ ๋–จ์–ด์ ธ์„œ ๋“ฑ์žฅ) โ†’ ๊ทธ๋ฃน ๋‹จ์–ด ์•„๋‹˜
abba โŒ (a๊ฐ€ ๋–จ์–ด์ ธ์„œ ๋“ฑ์žฅ) โ†’ ๊ทธ๋ฃน ๋‹จ์–ด ์•„๋‹˜
abc โœ… โ†’ ๊ทธ๋ฃน ๋‹จ์–ด
  • ์ž…๋ ฅ๋œ N๊ฐœ์˜ ๋‹จ์–ด ์ค‘ ๊ทธ๋ฃน ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ.

๐Ÿ›  ํ’€์ด ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  1. ๋‹จ์–ด๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์—ฐ์†๋˜์ง€ ์•Š์€ ๋ฌธ์ž๊ฐ€ ๋‚˜์˜จ ๊ฒฝ์šฐ ์ฒดํฌ
    • ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ด์ „ ๋ฌธ์ž์™€ ๋‹ค๋ฅด๋‹ค๋ฉด, ์ด๋ฏธ ๋‚˜์˜จ ๋ฌธ์ž์ธ์ง€ ํ™•์ธ.
    • ์ด์ „์— ๋“ฑ์žฅํ•œ ์  ์žˆ๋‹ค๋ฉด ๊ทธ๋ฃน ๋‹จ์–ด๊ฐ€ ์•„๋‹˜ (false ๋ฐ˜ํ™˜).
  2. ์ค‘๋ณต ๋ฌธ์ž ์ฒดํฌ๋ฅผ ์œ„ํ•ด HashSet ์‚ฌ์šฉ
    • ๋ฌธ์ž๊ฐ€ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ๋น ๋ฅด๊ฒŒ ํ™•์ธ (O(1)).
  3. ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ๊ทธ๋ฃน ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ

๐Ÿ’ก ์ฝ”๋“œ

public class Baekjoon_1316 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int ans = 0;
        for (int i = 0; i < n; i++) {
            String s = sc.next();
            if (isGroupWord(s)) {
                ans++;
            }
        }
        System.out.println(ans);
    }

    private static boolean isGroupWord(String s) {
        Set<Character> set = new HashSet<>();
        char prev = s.charAt(0);
        set.add(prev);
        for (int i = 1; i < s.length(); i++) {
            char now = s.charAt(i);
            if (now != prev && set.contains(now)) { // ์ด์ „์— ๋‚˜์˜จ ๋ฌธ์ž๊ฐ€ ๋–จ์–ด์ ธ์„œ ๋‹ค์‹œ ๋“ฑ์žฅ
                return false;
            }
            set.add(now);
            prev = now;
        }
        return true;
    }
}

๐Ÿ† ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

  • ๊ฐ ๋‹จ์–ด ๊ธธ์ด L์— ๋Œ€ํ•ด O(L) ์ˆ˜ํ–‰ (HashSet์€ O(1))
  • N๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ ์ด O(NL).
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ N = 100, L = 100 โ†’ O(10,000)
5jeong