일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 텐션 업 10기!
- 아자아자 화이팅
- 자료구조
- SeongSeobDang
- HAVE A GOOD DAY
- 네트워크
- Have a good day :)
- 우유가 옆으로 넘어지면 아야
- SSAFY 테스트
- I am Korean
- Have a nice day.
- 텐션 업 10기 화이팅
- 모르고리즘
- SSAFY 화이팅
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- 우유아야
- SSAFY IM/A
- Java 환경 설정
- 우유가옆으로넘어지면아야
- amazon
- SSAFY 10기 화이팅
- DP
- 자고 싶다
- have a nice day
- 수학
- DFS
- Hamming weight
- BFS
- 코로나 싫어요
- Today
- Total
Hope Everyone Is Happy
[실버 3] 2607. 비슷한 단어 (Java) 본문
https://www.acmicpc.net/problem/2607
2607번: 비슷한 단어
첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이
www.acmicpc.net
프론트 엔드도 재미있네용
※ 문제를 요약하면 아래와 같습니다.
▶ 비슷한 단어 찾기
▶ 비슷한 단어는 2가지의 형태로 존재
▶ 1. 두 개의 단어가 같은 문자의 종류로 이루어져 있으면 비슷한 단어
( ex- GOD, DOG 등)
▶ 위와 같은 상태를 같은 구성을 갖는 두 단어로 표현
▶ 2. 한 단어에서 한 문자를 더하거나, 빼거나, 하나의 문자를 다른 문자로 바꾸어 같은 구성을 가지면 비슷한 단어
( ex- GOD, GOOD or LIM, SLIM 등)
▶ 입력은 첫째 줄에 단어의 개수가 주어지고 두번째 줄에는 기준이 되는 단어가 주어짐
▶ 세번째 줄부터, 두번째 줄의 단어와 비교하여 비슷한 단어인지 비교 ( 모든 단어는 대문자 )
▶ 출력은 두번째 줄에 입력된 단어와 비슷한 단어의 갯수 출력
◈ Input
4
DOG
GOD
GOOD
DOLL
◈ Output
2
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ ASCII 코드를 활용하여 두번째 줄에 입력된 기준이 되는 단어에 나온 각 문자의 갯수를 저장
▶ 중복된 단어를 대비하여 boolean 형태의 배열이 아닌 int 형태의 배열로 문자의 갯수를 저장
▶ 두개의 단어를 비교할 때 단어의 길이가 2이상 차이날 경우 비슷한 단어 X
▶ 두개의 단어 길이가 같은 경우 단어가 모두 일치하거나 한가지만 불일치하면 비슷한 단어
ex) DOG, GOD - 모든 단어가 일치 / GOD GOT 단어 하나 불일치 하지만 비슷한 단어
▶ 기준 단어의 길이가 1개 많을 경우 비교 하는 단어가 모두 사용되어야 비슷한 단어
ex) GOOD (기준 단어), GOD (비교 단어) / G,O,D + O
▶ 비교하는 단어의 길이가 1개 많을 경우 기준 단어가 모두 사용되어야 비슷한 단어
ex) GOD (기준 단어), GOOD (비교 단어) / G,O,D + O
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int nWords = Integer.parseInt(bf.readLine());
String strFirstWord = bf.readLine();
int nSimilarCount = 0;
for(int i = 0 ; i < nWords-1; i++) {
String strWord = bf.readLine();
int[] narrASCII = new int[26];
// A=65~ Z=90까지
for(int j = 0; j < strFirstWord.length(); j++) {
narrASCII[(int)strFirstWord.charAt(j) - 65]++;
}
// 기준 문자열 길이 보다 2개이상 크거나 작으면 리턴.
if(strWord.length() < strFirstWord.length()-1 || strWord.length() > strFirstWord.length()+1)
continue;
// 1. 같은 단어 있을 경우 카운트
int nMatchCount = 0;
// 몇 개인지 카운트
for(int j = 0; j < strWord.length(); j++) {
if(narrASCII[(int)strWord.charAt(j) - 65] > 0) {
nMatchCount++;
narrASCII[(int)strWord.charAt(j) - 65]--;
}
}
// 단어가 같을 경우, 기본단어가 클 경우, 입력된 단어가 클 경우
if(strWord.length() == strFirstWord.length()
&& (nMatchCount == strFirstWord.length()-1 || nMatchCount == strFirstWord.length())) {
nSimilarCount++;
} else if(strWord.length() < strFirstWord.length()
&& nMatchCount == strWord.length()) {
nSimilarCount++;
} else if(strWord.length() > strFirstWord.length()
&& nMatchCount == strFirstWord.length()){
nSimilarCount++;
}
}
System.out.println(nSimilarCount);
}
}
읽어주셔서 감사합니다!
Good Luck! (피드백 고맙습니다)
'※ 백준 (Baekjoon) > [Java] 문제 풀이 ( Solve the problems)' 카테고리의 다른 글
[실버3] 14425. 문자열 집합 (Java) (0) | 2023.08.09 |
---|---|
[골드5] 9251. LCS (Java) (0) | 2023.08.08 |
[실버 4] 1676. 팩토리얼 0의 개수 (Java) (0) | 2023.08.06 |
[실버 4] 2839. 설탕 배달 (Java) (0) | 2023.08.06 |
[브론즈 1] 2869. 달팽이는 올라가고 싶다. (Java) (0) | 2023.08.06 |