구현 5

[백준] 17478번 재귀함수가 뭔가요? - 재귀(5) [JAVA]

https://www.acmicpc.net/problem/17478 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 문제 문제 풀이 전형적인 재귀 문제다. 구현할 때 헷갈렸던 부분 "라고 답변하였지." 를 어떻게 구현해야할까? 푼 방법 *지역변수와 전역변수를 잘 활용하자. 1) "____"를 담아둘 전역 변수 underbar1를 ""로 초기화하여 생성한다. 2) 재귀함수 내의 지역 변수 down을 "____"로 저장한다. 3) 지역 변수 underbar를 전역 변수 underbar1의 값을 받도록 한다. *1..

백준 문제풀이 2022.09.29

[백준] 11729번 하노이 탑 이동순서 - 재귀(4) [JAVA]

https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 문제 문제 풀이 전형적인 재귀함수 문제다. 왜 재귀인가? 1) N개의 원판이 있을 때, 크기가 N인 마지막 원판을 1 ➡ 3으로 옮겨야한다. 2) N - 1 개의 원판들이 모두 1 ➡ 2로 옮겨져야한다. 3) 크기가 N - 1인 마지막 원판을 1 ➡ 2로 옮겨야한다. 4) N - 2 개의 원판들이 모두 1 ➡ 3으로 옮겨야한다. ... ... 1) ~ 4)와 같은 순서로 계속 반복될 ..

백준 문제풀이 2022.09.29

5. [백준] 1991번 트리 순회 - 이진 트리 Binary Tree(3)

https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net Remind Binary Tree Binary Tree란 무엇인가? 각 부모 노드가 최대 두 개의 자식 노드를 가지는 자료구조 각각의 자식 노드는 왼쪽, 오른쪽이라고 명시하기 때문에, 일반적인 트리 구조가 아님! 전위 순회, 후위 순회, 중위 순회 루트 노드부터 모든 노드를 어떻게 방문하는 순서 (부모(1) - 왼쪽 자식(2) - 오른쪽 자식(3)) 전위 순회 : (1) - (2) - ..

자료구조 2022.09.26

[백준] 10845번 큐 [JAVA]

https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 문제 풀이 백준 10828번 스택과 매우 유사한 구현 문제이다. 큐(queue)와 스택(stack)의 차이를 알고 있다면 구현에 어려움은 없을 것이다. 큐와 스택의 차이는 큐는 FIFO(First In, First Out), 스택은 LIFO(Last In, First Out), 즉 선입선출, 후입선출의 차이가 있다는 걸 알아야한다. LIFO : 스택의 후입 선출은 들어온게, ..

백준 문제풀이 2022.09.13

3. 큐 Queues

Queues란? FIFO(First In, First Out) 선입 선출 리스트의 제한된 형태 : 한쪽 끝에서만 넣고, 다른 쪽 끝에서만 뺀다. Enqueue(넣기) Dequeue(빼기) Front(맨 앞의 값) Rear(맨 뒤의 값) Array-based Queue의 경우 다음과 같이 계속해서 사용하게 되면, 배열의 한쪽 끝으로 점점 이동하게 된다는 문제점이 있다. 따라서 아래와 같이 실행하였을 때, 영구적으로 배열을 사용할 수 있게 된다. 그림처럼 배열을 원이라고 생각하고, 한쪽 끝으로 점점 이동했을 때, 다시 맨 앞으로 돌아가서 재활용하는 방법을 사용하면 된다. 이를 코드로 생각해보면, 아래의 코드처럼 사용할 수 있다. enqueue(E item){ rearIdx = (rearIdx+1) % si..

자료구조 2022.09.13