전체 글 98

[JAVA/백준1110] 더하기 사이클

1. 문제 2. 풀이 사이클의 횟수를 구하는 getCycle()을 호출하는데 여기서 원래 수로 돌아올 때 까지 연산이 반복되므로 각각의 조건에 나누어 재귀로 함수를 호출하고 사이클의 횟수를 저장하는 변수count의 값을 하나씩 증가해주었다. 연산은 정수n이 주어졌을때 10의 자리수와 1의 자리수를 더해준 후, 원래 n의 오른쪽 자리 수와 이어붙어주어야 하므로 string클래스의 내장 함수를 사용하는것이 편할것 같다는 생각이 들어서 문자열로 입력받았다. n이 00일 경우 ~ 1번만 연산을 해주면 되므로 바로 리턴 n이 0~9일 경우 ~ 예를 들어 n=9일 때, 09→0+9=09이므로 이어 붙이면 다음 n은 99가 된다. 즉, n을 두번 이어 붙이면 된다. n이 두자리 수인 경우 ~ 변수tmp에 n의 각 자..

[JAVA/백준9012] 괄호 - 스택

문제 풀이 테스트케이스만큼 문자열을 입력받는데, 이때 한번 입력받을때 괄호검사를 하는 함수를 호출한다. 괄호검사를 하는 함수 isCorrect()는 호출될때마다 스택을 새로 생성한다. 문자열의 길이만큼 검사를 해주는데, 이때 스택이 비었을 경우에는 문자열의 i번째 문자를 스택에 넣어준다. 스택이 비어있지 않으면 스택의 가장 위(peek())와 i번째 문자를 비교해준다. 이때 주의할점은 처음에 단순히 (와 ), 또는 )와 (처럼 괄호가 같지 않으면 pop이 되도록 해주었는데 괄호가 닫히는 모양은 스택의 top은 항상 '('이어야 하고 스택에 넣을 문자는 항상 ')'이어야 한다. 이점만 유의하고, 스택클래스를 사용한적이 있다면 삽질하지 않고 빠르게 풀 수 있을 문제였다 ㅠㅠ 소스코드 import java.u..

[JAVA/자료구조] List컬렉션 클래스 - ArrayList, LinkedList, Vector, Stack

List 인터페이스 List인터페이스는 중복을 허용하면서 저장 순서가 유지되는 컬렉션을 구현하는데 사용된다. 대표적인 List컬렉션 클래스에 속하는 클래스 4가지는 다음과 같다. List인터페이스에 정의된 메서드 1. Vector클래스 Vector클래스는 JDK1.0부터 사용해 온 ArrayList와 같은 동작을 수행하는 클래스이다. 하지만 기존 코드와의 호환성을 위해서만 남아있으므로 Vector클래스보다는 ArrayList클래스를 사용하는것이 좋다. 2. ArrayList클래스 ArrayList는 기존의 Vector을 개선한 것으로 Vector의 구현원리와 기능적인 측면에서 동일하다고 할 수 있다. ArrayList는 Obeject배열을 이용해서 구현하여 인덱스를 이용해서 데이터에 접근한다. 데이터를 ..

자료구조 2019.06.08

[JAVA/자료구조] 컬렉션 프레임 워크(Collections Framework)

컬렉션 프레임 워크(Collection Framework)이란? = 컬렉션(Collection)은 다수의 데이터, 즉 데이터 그룹을, 프레임워크(Frameworkd)은 표준화된 프로그래밍 방식 = 데이터군을 저장하는 클래스들을 표준화한 설계 = 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합 = 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것 컬렉션 프레임워크의 주요 인터페이스 3가지 컬렉션 프레임워크에서는 데이터를 저장하는 자료구조에 따라 다음의 3개의 인터페이스를 정의하였다. 그리고 List와 Set의 공통된 부분을 다시 뽑아서 새로운 인터페이스인 Collection을 추가로 정의하였다. 인터페이스간의 상속 관계는 ..

자료구조 2019.06.08

[JAA/자료구조] List와 Array차이

Reference https://wayhome25.github.io/cs/2017/04/17/cs-18-1/ 불러오는 중입니다... https://programmers.co.kr/learn/courses/17/lessons/803 자바로 배우는 자료구조(with 생활코딩) - 리스트(List)의 개념 | 프로그래머스 리스트(List)의 개념 배열은 데이터를 그룹핑해서 다수의 데이터를 효율적으로 관리하는 데이터 스트럭쳐입니다. 배열의 가장 큰 특징은 인덱스가 있다는 점이지요. 이 인덱스는 데이터를 매우 빠르게 가져옵니다. 하지만 인덱스를 써 데이터를 가져오려면 각 데이터의 인덱스 값이 고정되어야 합니다. 또 어떤 엘리먼트를 삭제하면 삭제된 데이터가 있던 자리는 비워둬야 해 메모리가 낭비됩니다. 또 배열에 ..

자료구조 2019.06.08

[JAVA/자료구조] 큐(Queue)

큐란? 큐는 먼저 들어온 데이터가 먼저 나가는 구조로, 선입 선출(FIFO:First-Int First-Out)이라고 한다. 큐는 뒤에서 새로운 데이터가 추가되고 앞에서 데이터가 하나씩 삭제되는 구조를 가지고 있다. 큐의 구조 - 전단(front): 큐에서 삭제가 일어나는 곳 - 후단(rear): 큐에서 삽입이 일어나는 곳 큐의 연산 - create(): 큐를 생성한다. - init(): 큐를 초기화한다. - is_empty(q): 큐가 비어 있는지를 검사한다. - is_full(q): 큐가 가득 찼는지를 검사한다. - enqueue(q, e): 큐의 뒤에 요소를 추가한다. - dequeue(q): 큐의 앞에 있는 요소를 반환한 다음 삭제한다. - peek(q): 큐에서 삭제하지 않고 앞에 있는 요소를 ..

자료구조 2019.06.06

[JAVA/백준1003] 피보나치 함수 DP

1. 문제 2. 풀이 위 문제는 DP를 사용하지 않고 풀면 시간초과가 발생한다. 그래서 처음에는 메모이제이션으로 구현하려고 했지만, 예를 들어 이미 계산되어 메모제이션 배열에 저장되어 있는 경우에 0과 1을 어떻게 출력해야할지 고민하는데 시간이 많이 걸려서 결국 구글링을 해서 점화식을 세워 해결하였다. 점화식은 n=1일때부터 0과 1이 몇번 출력되는지를 세워보면 규칙을 찾아낼 수가 있다. n 0호출 1호출 0 1 0 1 0 1 2 1 1 3 1 2 4 2 3 n이 행(i)이고 0호출했을때와 1호출했을때를 열(j)이라고 하여 점화식을 세우면 다음과 같다. f[i][j] = f[i-2][j] + f[i-1][j] i=0, i=1인 경우에는 미리 초기화해둔다. 3. 소스코드 import java.util.Sc..

[JAVA/백준10828] 스택

1. 문제 2. 풀이 자바 Collections클래스를 사용하여 스택을 구현하였다. 명령어 push 3은 문자열 push,공백,숫자 로 이루어진 문자열이므로 명령을 입력했을때 공백이 있을 경우, push명령을 처리하도록 해주었고 다른 명령어들은 switch문을 사용하였다. 이 때, stack.empty()에서 기본으로 제공하는 것은 true, false인데 문제에서 요구하는 것은 1,0이므로 함수를 수정해주었다. 스택의 기본 개념만 이해한다면 쉽게 풀 수 있는 문제였다. 3. 소스코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Stack; public class Main { public static v..