다차원배열의 알고리즘
하루에 알고리즘만 3~4개씩 푸는 수업이 계속 되고 있다. 처음 접했던 Bufferedreader 와 Stringtokenizer가 어느정도 익숙해졌고, 2차원 배열에 데이터를 넣고 빼는 것에 숙달되어서 처음은 데이터를 입력받는 곳에서 엄청난 오류들이 나왔지만 지금은 일단 기본 틀 잡기는 능숙하게 한다.
Character.getNumericValue(ch) 를 사용한 char -> int
String.valueOf와 Integer.parseInt에는 익숙하지만 알고리즘을 풀다보면 char형 데이터를 쓸일이 은근 있다. 이때 char형은 원래 int와 데이터 매칭이 되는데 이게 아스키 코드다 보니 그대로 쓸 수는 없다. 이때 이용하는 메서드.
Stringtokenizer에 대한 고찰
보통 bufferedReader와 더불어 string으로 나눠주는거에 사용하는데 이 때 readLine에서 라인을 바꾸지 않고 계속 쓰는경우를 좀 고려해봐야한다. 몇몇 문제에서는 코드가 너무 복잡해지는 단점이 있다.
백준 1158 번 문제 요세푸스 순열 중 순열을 원형으로 만들어서 조작을 해야하는 문제가 있었다. 문제 자체의 난이도는 높지않아서 나는 보고 arraylist로 해결했으나 ...
1 2 3 4 5 6 7 8 9 | while (people.size() != 0) { if (index == people.size()) index = 0; for (int i = 0; i < k-1; i++) { index ++; if (index == people.size()) index = 0; } sb.append(people.get(index)+", "); people.remove(index); } |
정석적인 방법은 큐를 이용하여 조작하는것이었다. 실제로 나는 index를 조작하는거에서 살짝 어려움을 겪었고 이건 다른사람이 보기에도 조금 복잡스럽긴 하다. 위의 코드는 아래와 같이 간단하게 구현할 수 있다.
while (people.size() != 0) { for (int i = 0; i < k-1; i++) { people.offer(people.poll()); } sb.append(people.poll()+", "); }
원형이 나온다면 "큐"를 생각해볼 것 !!!!
위 문제의 전체 소스는 깃에 모두 올려놨다.
댓글
댓글 쓰기