[백준] PS/Java

[백준 1501] 영어 읽기 - JAVA

SH3542 2025. 2. 22. 19:38

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

 

같은 단어려면

1. 0번째와 len-1번째 알파벳이 같음

2. 사용된 알파벳 개수가 같음

 

판별하려면 

1번을 Pos 클래스로 놓음

2번을 알파벳별로 카운팅 하는 대신 정렬해서 key로 씀

 

Map<String(key), List<Pos>> 사용

 

이후 M개의 문장을 공백기준으로 파싱하고, 각각 정렬해서 key로 씀

map에 key가 있으면 Pos List 비교해서 정답 누적후 출력

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Main {

  static class Pos {

    int s, e;

    Pos(int s, int e) {
      this.s = s;
      this.e = e;
    }
  }


  public static void main(String[] args) throws IOException {

    Map<String, List<Pos>> m = new HashMap<>();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());

    for (int i = 0; i < N; i++) {
      String s = br.readLine();
      String ss = sort(s);

      if (!m.containsKey(ss)) {
        List<Pos> l = new ArrayList<>();
        l.add(new Pos(s.charAt(0), s.charAt(s.length() - 1)));
        m.put(ss, l);
      } else {
        m.get(ss).add(new Pos(s.charAt(0), s.charAt(s.length() - 1)));
      }
    }

    StringBuilder sb = new StringBuilder();
    int M = Integer.parseInt(br.readLine());

    for (int i = 0; i < M; i++) {
      int ans = 1;
      boolean zero = true;
      String[] sa = br.readLine().split(" ");

      for (int j = 0; j < sa.length; j++) {
        int cur = 0;
        String s = sa[j];
        String ss = sort(s);

        if (m.containsKey(ss)) {
          for (Pos p : m.get(ss)) {
            if (p.s == s.charAt(0) && p.e == s.charAt(s.length() - 1)) {
              cur++;
            }
          }
        }

        if(cur != 0) {
          zero = false;
          ans *= cur;
        }
      }
      sb.append(zero? 0 : ans).append("\n");
    }

    System.out.println(sb);
  }

  public static String sort(String s) {

    StringBuilder sb = new StringBuilder();
    char[] ca = s.toCharArray();
    Arrays.sort(ca);

    for (char c : ca) {
      sb.append(c);
    }
    return sb.toString();
  }
}