일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- SQL
- 백트래킹
- DP
- BFS
- 프로그래머스
- 구현
- 스택
- Java
- 브루트포스
- Queue
- 배열
- BufferedReader
- 그리디
- 다리 만들기
- 탐색
- Stack
- HashMap
- LIS
- dfs
- oracle
- 새벽코딩
- 문자열
- 완전탐색
- 시뮬레이션
- 다이나믹프로그래밍
- 빅데이터
- 아스키코드
- Python
- 백준
Archives
- Today
- Total
새벽코딩
[백준] [6996] 애너그램 본문
반응형
문제
두 단어 A와 B가 주어졌을 때, A에 속하는 알파벳의 순서를 바꾸어서 B를 만들 수 있다면, A와 B를 애너그램이라고 한다.
두 단어가 애너그램인지 아닌지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다. 단어는 알파벳 소문자로만 이루어져 있다.
출력
각 테스트 케이스마다 애너그램인지 아닌지를 예체 출력과 같은 형식으로 출력한다.
출력 형식
정확한 출력 형식은 제출에서 언어를 Java로 설정하면 확인할 수 있다.
예제 입력 1 복사
3
blather reblath
maryland landam
bizarre brazier
예제 출력 1 복사
blather & reblath are anagrams.
maryland & landam are NOT anagrams.
bizarre & brazier are anagrams.
※풀이
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class Main {
private static boolean solveAnagrams(String first, String second ) {
char[] arr1 = new char[100];
char[] arr2 = new char[100];
String a, b;
// 문자열 길이비교
if(first.length() != second.length()) return false;
else {
// 문자열 -> 문자배열
arr1 = first.toCharArray();
arr2 = second.toCharArray();
// 문자배열 정렬
Arrays.sort(arr1);
Arrays.sort(arr2);
// 문자배열 -> 문자열
a = String.valueOf(arr1);
b = String.valueOf(arr2);
// 문자열 비교
if(a.equals(b)) {
return true;
} else {
return false;
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numTests = sc.nextInt();
for (int i = 0; i < numTests; i++) {
String first = sc.next().toLowerCase();
String second = sc.next().toLowerCase();
System.out.println(first + " & " + second + " are " + (solveAnagrams(first, second) ? "anagrams." : "NOT anagrams."));
}
}
}
※생각정리
정해진 형식에 맞춰서 해결해야하는 문제였다.
우선 읽어들인 두 문자열의 길이가 다를경우 비교할 필요가 없이 애너그램을 만들 수 없으므로 False를 리턴했다.
길이가 같은 경우에는 각 문자열을 문자배열에 담아 오름차순으로 정렬했다.
그 후, 오름차순 정렬된 문자배열을 다시 문자열에 담아 equals 비교하였다.
여기서 "=="가 아닌 equals를 사용한 이유는 "==" 사용할 경우 문자열 자체만이 아닌 주소값까지 비교를 하여 문자열과 주소값이 모두 같을 경우 True를 리턴한다.
equals경우에는 주소값이 아닌 문자열자체만 비교하여 같을 경우 True를 리턴한다.
-새벽코딩-
반응형
'알고리즘' 카테고리의 다른 글
[백준] [1373] 2진수 8진수 (0) | 2022.11.25 |
---|---|
[백준] [2745] 진법 변환 (2) | 2022.11.25 |
[백준] [1652] 누울 자리를 찾아라 (0) | 2022.11.23 |
[백준] [1159] 농구 게임 (0) | 2022.11.23 |
[백준] [10798] 세로읽기 (0) | 2022.11.22 |
Comments