일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 드롭박스포렌식
- 영국
- 밀라노
- 영국여행
- 교환학생수업
- 교환학생여행
- 독일교환학생
- 자바프로그래밍
- 교환학생
- 교환학생준비
- 기숙사비
- 교환학생지원
- 디지털포렌식
- 울름교환학생
- 밀라노두우모성당
- 울름공과대학교
- 교환학생기숙사
- 디지털포렌식2급
- 프라하여행
- java
- 이탈리아여행
- 독일기숙사
- 드롭박스아티팩트
- 울름기숙사
- 교환학생나라
- 울름
- 자바
- 애플키노트
- 내셔널갤러리
- 이탈리아
- Today
- Total
공부해야할 때
[JAVA] Anagram 코딩 본문
총 9개의 문제중 필수로 해야할 6개중 첫 문제이다.
Two strings are anagrams if one string can be formed by reordering the characters
from the other. Examples of this are:
English: silent / listen German: WIEN / WEIN
rail safety / fairy tales LAMPE / PALME
a) Implement an efficient method
public static boolean areAnagrams(String s1, String s2)
that checks if the two string s1 and s2 are anagrams. The method should also be
usable for very long strings (e. g. with 1 million characters).You can assume that
only the first 256 characters of the Unicode character set will appear in the strings
(i. e. the characters \u0000 bis \u00FF).
b) Measure the runtime of the method for different lengths n = 100, 1000,
10000,100000, and 1000000. What is the runtime behavior?
처음으로 나온 과제는 아나그램문제 였다.
Anagram[아나그램]이란 사전적 정의는 철자순서를 바꾼 말이다.
즉 위에 예시처럼 silent의 철자를 바꿔서 조합하면 listen이 나온다.
해리포터에 나온 Tom Marvolo Riddle 을 바꾸면 I am lord voldmort가 된다.
아나그램 문제는 알고리즘을 하는 사람들이라면 한번쯤은 접해본 문제일 것이다.
먼제 과제는 메인함수와 다른 시간 재는 프로그램을 제시하고 나는 아나그램을 코딩하기만 하면 된다.
내가 생각한 프로그램의 실행 순서는
1. 글자길이를 비교한다.
2. 대소문자를 무시하기위해 모두 소문자로 변형을 시켜준다
3. 문자열을 char[]로 바꾼다.
4. 문자열내 알파벳을 정렬한다
5. char[]형태를 String형태로 바꾼다.
위 형태로 알고리즘을 구상해보니
public static boolean areAnagrams(String s1, String s2){
//remove all space
s1 = s1.replaceAll(" ", "");
s2 = s2.replaceAll(" ", "");
// check lengths of two strings
if ( s1.length() != s2.length() ) {
return false;
}
// change into small letter and char
char[] character1 = s1.toLowerCase().toCharArray();
char[] character2 = s2.toLowerCase().toCharArray();
// sort
Arrays.sort(character1);
Arrays.sort(character2);
// change char[] to string
String compare1 = new String(character1);
String compare2 = new String(character2);
// Check the string
return compare1.equals(compare2);
}
이런 프로그램이 나왔다.
참고로 이 프로그램에선 교수가 문자 2개를 메인함수에 다 넣어놔서 그 두개가 일치하는지만 보면 되는거였다.
'Computer Engineering > Algorithms and Data structure' 카테고리의 다른 글
[JAVA] 단어 조합 가짓수 구하기 (0) | 2019.03.05 |
---|---|
[JAVA] 특정원소 포함여부 알아보기 (0) | 2019.02.08 |
[JAVA] 부분집합 알아보기 알고리즘 (0) | 2018.11.03 |
[JAVA] Plateau Length 구하기 알고리즘 (0) | 2018.10.31 |
이 게시판에 대해서 (0) | 2018.10.26 |