본문 바로가기

Algorithm84

[백준 알고리즘][자바] 10890번 : 알파벳 찾기 https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 문제해설 소문자로 구성된 단어가 주어졌을 때, a부터 z까지의 알파벳에 대해서 포함한다면 처음 등장하는 위치를 출력 포함 되지 않으면 -1을 출력한다. 해결방법 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; im.. 2021. 3. 10.
[백준 알고리즘][자바] 11720번 : 숫자의 합 https://www.acmicpc.net/problem/11720 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 문제 해설 숫자를 입력했을 때 문자로 받은 다음 숫자 N개로 잘라서 합을 출력하는 문제 포인트는 int등의 자료형으로 숫자를 받았을 때 예제 3번의 경우는 overflow가 발생한다. 따라서 문자열로 받아야 하는 점 해결 방법 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.Outp.. 2021. 3. 5.
[백준 알고리즘][자바] 4344번 : 평균은 넘겠지 https://www.acmicpc.net/problem/4344 4344번: 평균은 넘겠지 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. www.acmicpc.net 문제 해설 문제에 있는 예제를 쉽게 풀어 설명하자면 학교에 C개의 반이 있을 때 각각의 반마다 N명의 학생 수 가 존재한다. N명의 학생의 평균 점수를 구해서 N명중의 몇명이 평균을 넘는지 구해서 비율로 나타낸다. 해결 방법 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.Ou.. 2021. 3. 4.
[백준 알고리즘][자바] 1546번 : 평균 https://www.acmicpc.net/problem/1546 1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보 www.acmicpc.net 문제 해설 전에 했던 최댓값 구하기를 통해 최댓값을 구한 후 문제에 제시된 식 대로 점수를 조작한 후 평균을 구하면 될 거 같다. 해결 방법 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.Ou.. 2021. 3. 4.
[백준 알고리즘][자바] 2562번 : 최댓값 https://www.acmicpc.net/problem/2562 2562번: 최댓값 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어 www.acmicpc.net 문제 해설 서로 다른 9개의 자연수이닌깐 크기가 9인 배열을 생성하고 값을 배열에 담은 후 최댓값을 찾는다. 시도해보자. 해결 방법 package number_2562; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.Input.. 2021. 3. 2.
자료구조 - 순환 큐(Circular Queue) 큐는 스택과 반대의 특성인 선입선출(First In, First Out)의 특성을 가지고 있습니다. 선입선출의 특성은 앞에서 작업의 처리가 끝나면 다음 작업이 실행될 수 있게 하는 완충장치로써 많이 사용됩니다. 가령 쇼핑몰이나, 특정한 사이트에서 카카오톡 채팅상담을 보신적이 있으실 겁니다. 상담사는 1명이지만, 상담을 받으려는 사람은 많기 때문에 큐를 사용하여 한 사람의 상담이 끝날 때까지 다른 사람은 대기하도록 하는 것이 큐의 사용입니다. 스택에서는 노드의 삽입과 제거가 최상위 노드에서만 이루어졌지만, 큐는 제거는 제일 전단에서 삽입은 후단에서 이루어집니다. 큐는 크게 배열로 만들어지는 순환 큐(Circular Queue)와 링크드 큐(LinkedQueue)가 있습니다. 하나하나씩 알아가보도록 하겠습니.. 2021. 2. 27.
자료 구조 - 스택(Stack) 스택은 앞선 링크드 리스트와 반대로 가장 먼저 들어간 노드가 가장 마지막에 나오는 선입 후출(First In, Last Out) 구조로 되어 있습니다. 스택은 소프트웨어에서 널리 쓰이는 자료 구조입니다. C에서 사용하는 자동 메모리, 대부분의 네트워크 프로토콜들이 스택으로 이루어져 있습니다. 스택은 배열과 링크드 리스트로 구현할 수 있습니다. 이번 포스팅에서는 링크드 리스트로 구현한 스택을 알아보겠습니다. 링크드 리스트로 구현하면 스택의 용량에 제한을 두지 않아도 된다는 장점이 있습니다. typedef struct tagNode { char* Data; //데이터 struct Node* NextNode; //자기 위에 쌓여있는 노드를 가르킨다. } Node; 링크드 리스트로 구현된 스택은 두가지 포인터를.. 2021. 1. 27.
[백준 알고리즘][자바] 10818번 : 최소, 최대 https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 해결 이번 문제의 카테고리는 배열이었다. N개의 정수 중 최댓값과 최솟값을 출력하는 문제이다. 해결 방법 첫 번째 시도 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import ja.. 2021. 1. 19.
자료 구조 - 더블 링크드 리스트(Double Linked List) 더블 링크드 리스트는 기존의 링크드 리스트에서 탐색 기능을 개선한 자료 구조입니다. 기존의 다음 노드에 대한 포인터만 존재하던 노드에서 이전 노드에 대한 포인터를 추가하여 양방향으로 탐색이 가능하도록 만든 자료 구조입니다. 아래는 더블 링크드 리스트의 코드입니다. typedef struct tagNode { int Data; // 데이터 필드 struct tagNode* PrevNode; // 이전 노드에 대한 포인터 struct tagNode* NextNode; // 다음 노드에 대한 포인터 } Node; 더블 링크드 리스트 노드의 생성과 소멸 기존의 링크드 리스트에서 이전 노드에 데한 포인터(PrevNode)를 NULL로 초기화하는 것만이 추가되었습니다. Node* DLL_CreatNode(int N.. 2021. 1. 19.
자료 구조 - 링크드 리스트(Linked List) 링크드 리스트는 고정적인 길이인 배열과 다르게 가변적인 성격을 가진 데이터의 집합입니다. 리스트 내의 각 요소는 노드로 이루어져 있으며, 노드는 데이터를 보관하는 필드와 다음 노드의 주소의 포인터가 들어가 있습니다. 데이터와 포인터로 이루어진 노드를 이으면 링크드 리스트가 됩니다. 링크드 리스트에서 제일 앞의 노드를 헤드(Head) 제일 마지막 노드를 테일(Tail)이라고 합니다. 위의 구조를 코드로 나타내면 아래와 같습니다. typedef struct tagNode { int data; // 데이터 필드 struct tagNode* NextNode; // 다음 노드에 대한 포인터 } Node; Node MyNode; 노드의 생성과 소멸 Node* SLL_creatNode(int newData) { //.. 2021. 1. 19.
반응형