다차원배열의 알고리즘 

하루에 알고리즘만 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()+", ");
		}

원형이 나온다면 "큐"를 생각해볼 것 !!!! 

위 문제의 전체 소스는 깃에 모두 올려놨다.

댓글

이 블로그의 인기 게시물

git-receive-pack not permitted on 깃 허브 로그인 관련 문제