베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Coding Test/BOJ

[BOJ/JAVA] 2607번: 비슷한 단어

2022. 10. 24. 21:22

2607번: 비슷한 단어

 

2607번: 비슷한 단어

첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이

www.acmicpc.net

키워드

두 단어가 같은 구성을 갖는 경우, 또는 한 단어에서 **한 문자를 더하거나, 빼거나, 하나의 문자를 다른 문자로 바꾸어 나머지 한 단어와 같은 구성을 갖게 되는 경우**에 이들 두 단어를 서로 비슷한 단어라고 한다.


구현

가장 처음 입력 받는 단어를 26개 배열에 각 알파벳의 갯수를 대입한다.

다음으로 입력 받는 데이터는 각 알파벳 배열에서 빼는 연산을 하고, 각 절댓값을 더한다.

만약 결과에서 음수라면 추가적으로 데이터를 가진 것이다.

만약 결과에서 양수라면 알파벳이 그 만큼 부족한 것이다.

  1. 글자 수가 같은 경우
    • 글자의 배열만 다른 경우 → 합이 0이다.
    • 한 글자만 바꾸는 경우 → 합이 2이다.
  2. 글자 수가 1 차이나는 경우
    • 하나를 추가하는 경우 → 합이 1이다.
    • 하나를 제거하는 경우 → 합이 1이다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class java_2607 {
    // 입력되는 단어의 갯수
    static int N;
    // 첫 번째 단어의 26자리 알파벳 각 갯수 저장
    static int[] alphaList;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 26자리 배열 생성

        // 각 알파벳마다 가진 갯수 저장

        // 입력값 마다 26자리 배열 생성 -> 인덱스의 값을 확인 -> 같거나, 차이가 1만 나는 경우 비슷한 단어 카운트

        N = Integer.parseInt(br.readLine());

        int result = 0;

        alphaList = new int[26];

        // 첫 번째 단어 배열에 추가
        String firstWord = br.readLine();
        for (int i = 0; i < firstWord.length(); i++) {
            alphaList[firstWord.charAt(i) - 'A'] += 1;
        }

        // 나머지 단어 처리
        for (int i = 1; i < N; i++) {
            int targetAlphaList[] = Arrays.copyOf(alphaList, 26);
            String targetWord = br.readLine();

            // 입력 알파벳 카운트 갱신
            for (int j = 0; j < targetWord.length(); j++) {
                targetAlphaList[targetWord.charAt(j) - 'A'] -= 1;
            }

            // 배열 내용의 합
            int tmpResult = 0;
            for (int j = 0; j < targetAlphaList.length; j++) {
                tmpResult += Math.abs(targetAlphaList[j]);
            }

            // 한 글자만 바꾸는 경우 -> 0
            // 글자의 배열만 다른 경우 -> 0
            if (firstWord.length() == targetWord.length()) {
                if (tmpResult == 0 || tmpResult == 2) {
                    result += 1;
                }
            }

            // 추가해야 같아지는 경우
            // 삭제해야 같아지는 경우
            // -> 글자수가 1개 차이가 난다.
            else if (Math.abs(firstWord.length() - targetWord.length()) == 1) {
                if (tmpResult == 1) {
                    result += 1;
                }
            }

        }

        System.out.println(result);

    }
}

저작자표시 (새창열림)

'Coding Test > BOJ' 카테고리의 다른 글

[BOJ/JAVA] 1541번: 잃어버린 괄호  (0) 2022.10.24
[BOJ/JAVA] 5582번: 공통 부분 문자열  (0) 2022.10.24
[BOJ/JAVA] 10800번: 컬러볼  (0) 2022.10.19
[BOJ/JAVA] 3020번: 개똥벌레  (0) 2022.10.19
[BOJ/JAVA] 21318번: 피아노 체조  (0) 2022.10.19
    'Coding Test/BOJ' 카테고리의 다른 글
    • [BOJ/JAVA] 1541번: 잃어버린 괄호
    • [BOJ/JAVA] 5582번: 공통 부분 문자열
    • [BOJ/JAVA] 10800번: 컬러볼
    • [BOJ/JAVA] 3020번: 개똥벌레
    베오
    베오

    티스토리툴바