문제 풀이/자료 구조 5

[백준] 1874 (스택 수열)

#1 알고리즘1. 어떤 스택에는 '이상한' 규칙이 있다. 바로 해당 스택에 push하는 원소의 값이 순서대로 1, 2, 3, ... , n여야 한다는 규칙이다. 즉, 맨 처음 스택에 push하는 값은 반드시 1이어야 하며, 1 다음에는 2, 2 다음에는 3, ... , 62 다음에는 63을 push해야 한다.
2. 반면, pop에 대한 규칙은 없다. 스택이 비어있는 상태에서 pop을 하는게 아닌 이상, 아무렇게나 해도 된다.
3. (1)의 규칙은 (스택에 들어 있는 원소들 중 가장 나중에 push된 값 + 1)을 push하는 규칙이 아님에 유의한다. 예를 들어 1, 2, 3을 차례대로 push하고 pop을 2번 한 상황이 있다. 여기서 추가적으로 push를 하려는 경우, 그 값은 2가 아니라 4다.4. ..

[백준] 1966 (프린터 큐)

#1 알고리즘#1-1 큐 [백준] 10845 - 큐#1 알고리즘 java.util.Stack과는 달리 java.util.Queue는 클래스가 아니라 인터페이스다. 나는 java.util.Queue 인터페이스를 구현한 클래스인 LinkedList를 Queue로서 사용했다. last()는 확장 함수(Extension functions)kenel.tistory.com큐(Queue)가 사용되었다는 점에서 비슷한 문제다. #1-2 목표 문서의 인덱스프린트할 목표 문서의 인덱스를 어떤 변수 A로 두고 추적할 수도 있다. 하지만 이러면 Queue가 offer되거나 poll될 때에 바뀌는 목표 문서의 위치에 맞게 A의 값을 계속 조정해주어야 한다. 이는 가독성에 나쁜 영향을 미치고, 그래서 에러의 여지를 키운다. 나는..

[백준] 9012 (괄호)

#1 코드 - 코틀린import java.util.Stackfun main() {    val testCaseCount = readln().toInt()    for(i : Int in 0.. = Stack()    for(char in testCase) {        if(char == '(') {            stack.push('(')        } else { // char == ')'            if(stack.isEmpty()) {                return false            }            stack.pop()        }    }    return stack.isEmpty()}'('을 만나면 스택에 push하고, ')'을 만나면 스택을..

[백준] 10845 (큐)

#1 알고리즘java.util.Stack과는 달리 java.util.Queue는 클래스가 아니라 인터페이스다. 나는 java.util.Queue 인터페이스를 구현한 클래스인 LinkedList를 Queue로서 사용했다. last()는 확장 함수(Extension functions)다. #2 여담확장 함수 Iterable.last()가 기술된 _Collections.kt는 실제 위치가 kotlin-stdlib.jar/kotlin/collections에 있지는 않지만, 논리적인 구조상 파일 첫머리의 pakage에 kotlin.collections로 선언되어 있다. 참고로, _Collections.kt와 Collections.kt는 다른 파일이며 후자는 해당 디렉토리에 실제로 존재한다. 물론, 패키지 선언은 ..