알고리즘 28

[Baekjoon] 백준 11720 숫자의 합 - java

이번에는 입출력 문제 중 하나인 숫자의 합을 풀어보려 합니다. 문제는 https://www.acmicpc.net/problem/11720 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 여기서 확인하시면 됩니다. 문제풀이 package Baek; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Java11720 { public static void main(String[] args) throws IOException { BufferedReader br =..

Algorithm/Baekjoon 2022.02.19

[Baekjoon] 백준 10953 A + B - 6 - java

오늘은 입출력 문제인 A + B의 많은 문제중 6번째 문제를 풀어볼까 합니다. 이번 문제는 Scanner와 BufferedReader 두가지를 사용해서 각각 풀어봤습니다. 문제는 https://www.acmicpc.net/problem/10953 10953번: A+B - 6 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 여기서 확인하시면 됩니다. 문제풀이 package Baek; import java.io.IOException; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner sc = new ..

Algorithm/Baekjoon 2022.02.19

[CS50] 재귀

알고리즘을 구현하기 위해서 코드를 작성하다 보면 동일한 작업을 반복해야 할 때가 있는데 이런 작업을 함수로 구현하면 코드를 보다 효율적으로 만들 수 있었습니다. 하지만 함수 내에서도 동일한 작업이 반복되는 경우는 어떨까요? 오늘은 함수를 재귀적으로 호출하는 방법에 대해 공부해보도록 하겠습니다. 재귀란? 어떠한 것을 정의할 때 자기자신을 참조하는 것을 뜻한다.(출처 : 위키백과) 지금까지 main함수에서 함수를 호출해서 코드를 실행했었습니다. 이것을 다르게 말하면 함수 안에서 또 다른 함수를 사용할 수 있다 라는 말인데 그렇다면 함수가 본인 스스로를 호출해서 사용할 수도 있다는 말이 되고 이를 재귀라고 합니다. 지금까지는 아래와 같은 피라미드 모양을 출력하기 위해서 # ## ### #### #include..

[CS50] 정렬 알고리즘의 실행시간

지금까지 정렬 알고리즘이나 검색 알고리즘을 공부하면서 실행 시간의 상한과 하한도 함께 배워봤습니다. 오늘은 각각의 실행시간을 비교해보면서 그 시간을 단축시킬 수 있는 방법이 있는지에 대해 공부해보도록 하겠습니다. 지금까지 선형 검색(탐색), 이진 검색(탐색), 버블 정렬, 선택 정렬의 실행시간을 Big-O와 Big-Ω로 나눠보면 - 실행시간의 상한 O(n^2) : 선택 정렬, 버블 정렬 O(n log n) O(n) : 선형 검색 O(log n) : 이진 검색 O(1) - 실행시간의 하한 Ω(n^2) : 선택 정렬, 버블 정렬 Ω(n log n) Ω(n) Ω(log n) Ω(1) : 선형 검색, 이진 검색 로 나눠볼 수 있습니다. 그런데 여기서 실행시간을 단축시킬수 있는 게 있을까요?? 생각해봅시다. 버블..

[CS50] 선택 정렬

저번 포스팅의 버블 정렬은 직관적이긴 하지만 O(n^2)의 시간이 소요된다고 했습니다. 이번에는 다른 정렬 알고리즘인 선택 정렬에 대해 공부해보도록 하겠습니다. 선택정렬 각 자료를 비교하는 횟수는 증가하지만 교환 횟수를 최소화하는 정렬입니다. 배열 안의 자료 중 가장 작은 수(혹은 큰 수)를 찾아 첫 번째 위치(혹은 가장 마지막 위치)의 수와 교환해주는 방식을 사용합니다. 버블 정렬과 마찬가지로 예를 들어 설명하자면 6 4 3 7 1 2 8 5 라는 정렬되지 않은 숫자가 있을 때 이를 선택 정렬을 이용해 오름차순으로 정리하는 방법은 우선 위의 수중에서 가장 작은 값을 찾습니다. (여기서 1) 1 4 3 7 6 2 8 5 // 1과 6의 위치를 바꿉니다. 그다음 1을 제외하고 4부터 시작해서 또 가장 작은..

[CS50] 버블 정렬

어떤 배열이 있을 때 그 배열이 이미 정렬되어있는 배열이라면 훨씬 빠른 속도로 검색이 가능합니다. 정렬하기 위한 방법은 여러 가지가 존재하고 각각 실행시간도 차이가 있습니다. 오늘은 정렬 기법 중 하나인 버블 정렬에 대해 공부해보도록 하겠습니다. 버블정렬 사실 이러한 정렬이 있다는 건 알고 있었지만 버블 정렬이라고 불리는지는 몰랐습니다. ㅎㅎ 버블 정렬은 거품이 떠오르듯 두 개의 인접한 자료값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법을 말합니다. 버블정렬은 단 두개의 요소만 정렬해주는 좁은 범위의 정렬에 집중하기 때문에 간단하지만 하나의 요소를 정렬하기 위해서 많은 낭비가 발생할 수 있습니다. 예를 들어 설명하자면 6 4 3 7 1 2 8 5 라는 순서의 숫자가 있습니다. 이를 오름차순으로 정..

[CS50] 선형 검색

이번에는 주어진 배열에서 선형 검색으로 값을 찾는 방법을 공부해보려고 합니다. 전화번호부 같이 한개의 배열이 아닌 여러 개의 배열이 있는 경우 한 배열의 특정 속성 값을 찾고 동일한 위치의 다른 배열의 속성 값을 출력하는 방법을 공부해보도록 하겠습니다. 선형 검색은 지난 포스팅에서 정리했듯이 처음부터 끝까지 원하는 원소를 찾을 때까지 차례대로 검색하는 것을 말합니다. 선형 검색의 정확성이나 효율성을 따져본다면 처음부터 끝까지 모든 자료를 확인한다는 것에 정확하다고는 할 수 있지만 효율적이지는 않습니다. 만약 100만 개의 원소가 있는 리스트에 원하는 자료가 가장 마지막에 있다거나 리스트 안에 없다면 이처럼 효율성이 매우 떨어지는 작업은 없을 겁니다. 따라서 선형 검색은 자료가 정렬되어있지 않거나 그 어떤..

[CS50] 알고리즘 표기법

프로그램을 실행하면 작업이 완료되기까지 어느 정도의 시간이 소요됩니다. 이 시간은 처리하는 데이터가 많아질수록, 처리하는 작업이 복잡해질수록 더욱 오래 걸리게 되고 이 실행시간은 매우 중요해집니다. 특정 알고리즘을 작성할 때 그 실행시간을 표기하는 방법에 대해 공부해보도록 하겠습니다. 알고리즘의 실행시간을 표기하는 방법에는 3가지가 있습니다. (얼마나 나누냐에따라 5가지로 표시하는 곳도 있습니다.) 1. Big-O 표기법 2. Big-Omega 표기법 3. Theta 표기법 이중에서 Big-O와 Big-Omega 표기법에 대해 조금 자세히 공부해보겠습니다. Big-O 위의 그림을 공식으로 표기한 것을 Big-O 표기법이라고 합니다. 각각 O(n), O(n/2), O(log2 n)으로 표기할 수 있는데, ..

[CS50] 검색 알고리즘

지금까지는 메모리의 구조, 자료형 같은 기본적인 개념을 공부했지만 이번 포스팅부턴 지금껏 배운 내용을 활용해서 검색, 정렬 등과 같은 문제를 풀어내는 알고리즘에 대해 공부하고 정리해보도록 하겠습니다. 검색 알고리즘은 선형 검색, 이진 검색, 해시 검색 이렇게 3가지가 있는데 이중 선형 검색과 이진 검색에 대해 공부해보도록 하겠습니다. 선형검색 만약 10 23 6 1 2 50 이렇게 정렬이 되지 않은 6개의 숫자가 보이지 않게 있을 때 50을 찾아내는 방법엔 어떤 것이 있을까요? □□□□□□ 이렇게 박스 안에 들어있다고 가정한다면 당연히 정렬도 되어있지 않은 수니까 맨 처음 □부터 끝까지 하나하나 열어서 살펴보는 방법밖엔 없습니다. 만약 여기서 50이 가장 뒤에 있다면 모든 박스를 다 열어봐야 할 겁니다...

[CS50] 스크래치 사용해보기

알고리즘을 만들려면 여러 가지 프로그래밍 언어를 사용할 수 있는데요. 가장 쉽게 알고리즘을 만드는 방법 중 하나는 그래픽 프로그래밍 언어를 사용해 그래픽으로 이루어진 알고리즘 블록을 붙여가며 기능을 완성하는 것일 겁니다. 이번에는 그래픽 프로그래밍 언어 중 하나인 스크래치 라는걸 사용해보려고 합니다. Scratch - Imagine, Program, Share (mit.edu) Scratch - Imagine, Program, Share Scratch is a free programming language and online community where you can create your own interactive stories, games, and animations. scratch.mit.edu 페..