아나그램이란? 두 문자열이 알파벳의 나열 순서는 다르지만 그 구성이 일치하면 두 단어를 아나 그램이라고함.
AbcdE EdcbA 이런식이면 나를 순서는 다르지만 개수가 일치하여 이것은 아나 그램이라 할 수 있다.
맞으면 Yes를 출력 아니면 No를 출력한다.
public class Main {
public String solution(String s1, String s2) {
String answer = "YES";
HashMap<Character, Integer> map = new HashMap<>();
for(char x : s1.toCharArray()) {
map.put(x, map.getOrDefault(x, 0)+1);
}
for(char x : s2.toCharArray()) {
if(!map.containsKey(x) || map.get(x) == 0) {
return "NO";
}
map.put(x, map.get(x)-1);
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.next();
System.out.print(T.solution(a,b));
}
}
return "NO"; 를 안하고 answer에다가 대입하면 map.put -1 부분에서 없는 값에 -1하려고 해서 널포인트 익셉션이 뜰 수 있다.
public int solution(String a, String b) {
int answer = 0;
HashMap<Character, Integer> am = new HashMap<>();
HashMap<Character, Integer> bm = new HashMap<>();
for(char x : b.toCharArray()) {
bm.put(x, bm.getOrDefault(x,0)+1);
}
int L = b.length()-1;
for(int i=0; i<L; i++) {
am.put(a.charAt(i), am.getOrDefault(a.charAt(i),0)+1);
}
int lt = 0;
for(int rt=L; rt<a.length(); rt++) {
am.put(a.charAt(rt), am.getOrDefault(a.charAt(rt), 0)+1);
if(am.equals(bm)) {
answer++;
}
am.put(a.charAt(lt), am.get(a.charAt(lt))-1);
if(am.get(a.charAt(lt))== 0) {
am.remove(a.charAt(lt));
lt++;
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.next();
System.out.print(T.solution(a,b));
}
두 개의 값을 받아서 연속되는 문자를 포함하고 있는지 확인하는 알고리즘이다.
일단 포함인걸 확인하는 b를 반복문을 통해서 bm에 넣어준다.
그리고 L은 acd의 길이 이다
반복문을 이용해서 am에 있는 숫자를 acd인 bm만큼 넣어준다
그리고 왼쪽 lt를 0으로 하고
rt는 L부터 시작하고 a의 길이만큼 돌게 만들어준다.
만약에 3글자라면 일단 그 길이만큼 2개를 넣어주고, 그 다음 마지막 문자를 rt로 둬서 반복문을 돌려서 넣는 방법을 한다.
그 다음 -1한 값이 0이면 삭제해줘야 한다. remove로
'Algorithm' 카테고리의 다른 글
[백준] 설탕 배달 (0) | 2022.02.28 |
---|---|
[백준] 숫자의 합 (0) | 2022.02.28 |
[백준] 일곱 난쟁이 (0) | 2022.02.27 |
[프로그래머스] [1차] 다트 게임 (0) | 2022.02.26 |
[프로그래머스] 두 정수 사이의 합 (0) | 2022.02.24 |