규칙을 찾는 문제로써 표를 통해 1부터 20까지의 예를 나타내 보았다.



여기서 작동 횟수가 1씩 커지는 것이 2번에 걸처 반복되면 반복 횟수(즉, 차이가 1씩 증가하는 횟수의 그룹)도 1씩 증가하는 것을 볼 수 있다.

이것을 코딩해봤는데 계속 시간 초과가 뜬다..

 시간 초과된 코드이다.


 다음은 더 간단히 만든 코드이다.


계속 시간 초과가 뜨는데 더 좋은 방법을 알고계신분은 댓글로 남겨주세요...

이번 포스팅은 자바에서 사용되는 컬렉션 프레임워크(자료구조)가 무엇이고 어떠한 종류가 있는지에 대해서 알아보도록 하겠습니다.

컬렉션 프레임워크(자료구조) ?

 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)하기 위해서 사용하는 라이브러리를 의미한다. java.util 패키지에 포함된 인터페이스들(List, Set, Map, Queue, Stack 등)을 구현한 클래스들이 컬렉션 프레임워크로 사용된다.
 이전에 컬렉션 프레임워크와 비슷한 배열에 대해서 알아보았다. 배열은 저장할 크기가 배열을 생성할 때 결정되어 배열의 크기가 넘어가면 저장이 불가능하다. 또한 데이터를 삭제하면 해당 인덱스의 데이터는 비어있는 구조를 갖는 등 여러 문제점들이 발생된다. 이러한 배열이 갖는 문제점들을 컬렉션 프레임워크를 통해서 해결이 가능하다. 컬렉션 프레임워크들은 동적으로 데이터를 저장하는 크기(용량)가 자동적으로 늘어나고, 중간의 데이터를 삭제하면 인덱스가 하나씩 앞으로 당겨진다. 

컬렉션 프레임워크 종류 / 차이점

 컬렉션 프레임워크들은 데이터들을 담는 그릇이라는 점에서는 동일하지만 성격(특징)에 따라 다양한 클래스(인터페이스) 들이 존재한다. 대표적인 컬렉션 프레임워크에 대해서 알아보자.
 우선 java.util 패키지에 Collection과 Map 인터페이스가 있다. 먼저 Collection 인터페이스를 상속받는 대표적인 인터페이스들이 List, Set 등이 있고 이들을 구현하는 클래스들이 자료구조에 속한다. List를 구현하는 클래스들은 ArrayList, Vector, LinkedList 등이 있고, Set을 구현하는 클래스들은 HashSet, LinkedHashSet, TreeSet 등이 있다.
 또한 Map 인터페이스를 상속받는 구현 클래스(HashMap, Hashtable, TreeMap 등)가 있고 이들 또한 자료구조에 속한다. 

 이러한 컬렉션 프레임워크들은 어떠한 인터페이스를 구현하였는지에 따라서 기본적인 성격이 달라진다.우선 List를 구현하는 클래스들은 인덱스 순서에 따라 데이터가 저장되고 데이터의 중복 저장이 가능하다. Set을 구현하는 클래스들은 순서를 유지하지 않고 데이터를 저장하며 중복된 데이터의 저장이 불가능하다Map을 구현하는 클래스들은 키(key)와 값(value)을 동시에 저장한다.(즉, 키(key)를 통해 값을 불러온다.) 이때 키는 중복 저장이 불가능하다.

 해당 인터페이스를 구현하는 클래스들은 동일한 조작법(메소드)을 갖고 있지만 동작하는 내용들은 조금씩 다르다. 이들이 어떠한 동작을 하는지는 다음 포스팅부터 List, Set, Map 별로 하나씩 알아보도록 하겠다.




자리수가 2이상 차이나는 문자열을 비교하여 같은 값을 찾으면 flag를 반전시켜 주면 끝날줄알았는데 아니었다..

이웃하는 값들의 값을 제외하고 같은 값을 찾아 줘야 하기 때문이다. 그것때문에 10분 더 걸렸다.

자세한 내용은 코드에 주석을 달았다.


문제를 잘읽고 풀어야겠다는 생각을 심어준 문제이다. 제대로 풀었는데 왜 틀렸다고 나오는지 해맸는데 문제를 잘못 이해한것이다. 

while문을 돌리며 cnt를 1씩 증가시켜 cnt가 홀수일때와 짝수일때를 나눠서 풀면 쉽게 해결할 수 있는 문제이다.


그림때문에 어렵게 보일수 있지만 메모장에 숫자들을 적어 규칙을 찾아보면 쉽다.



코드


ArrayList를 사용해서 정렬한뒤 값을 구하면 될줄 알았는데 ArrayList가 아직 숙달 되지 않아서 쓰지 못했다.

arraylist에 값을 저장하는 방법이 있는지, 있으면 어떻게 써야 하는지 찾아봐야겠다. 

그냥 배열에 값을 저장하고 문제를 풀었다.


형 변환 한다고 시간이 꽤 걸렸다. 앞에서 썼던 것들을 잘 활용하면 쉽게 풀 수 있는 문제이다.


풀이 :

입력 받은 알파벳을 아스키코드를 통해 숫자로 변경 후 배열에 저장한다. 자세한 풀이는 주석에 있다.



charAt(0) 을 통해 입력 받은 값들 char형 변수에 할당한다.


+ Recent posts