분류 전체보기
[Android] 음악 재생 플레이어 만들기
[Android] 음악 재생 플레이어 만들기
2021.11.21몇 가지 기능이 있는 음악 재생 플레이어를 만들어보자. 소스코드 더보기 package kr.ac.cnu.computer.seekbar; import android.media.MediaPlayer; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity {..
[Android] 리스트 보여주기
[Android] 리스트 보여주기
2021.11.21여러 개의 리스트를 보여주기 위해서 어떻게 해야 할까? 이 때 리스트 뷰와 리사이클러 뷰를 사용할 수 있다. (요즘은 리사이클러 뷰를 더 많이 사용하는 추세임) 리스트 뷰는 수평으로만 리스트를 보여줄 수 있지만, 리사이클러 뷰는 수평과 수직 방향 모두 사용할 수 있다. 잠시 핸드폰에서 설정 버튼을 누르고 화면 소리 등 여러가지 설정을 한다고 생각해보자. 리스트들이 수평 방향으로 보여지는데, 보여주는것에서 끝나지 않고 리스트들 중 하나를 선택해 세부 설정으로 접근해야 한다. 이 때 쓰이는 게 선택 위젯이다. 리스트를 보여주는 것과 리스트의 정보를 관리하는 건 서로 차이가 있다. 보여주는 동작은 위젯이 처리하고 정보 관리는 어댑터 클래스가 처리한다. 즉, 여러 개의 리스트 중에서 하나를 선택하는 방식의 선택..
Deep Learning (3)
Deep Learning (3)
2021.11.18지난 시간에 배운 내용을 잠깐 짚고 가자. Linear System으로는 복잡한 모델을 처리할 수 없어 활성함수를 통해 NonLinear을 도입해서 사용한다. 가중치 W는 Backpropagation을 통해 Gradient Descent를 통해 갱신한다. 이제 활성함수에 어떤 것들이 들어갈 수 있는지에 대해 알아보자. 활성 함수들의 조건으로는 증가함수여야하고, backpropagation이 원활하게 진행될 수 있도록 Gradient 값 (미분값) 이 깔끔하게 나와야 한다. (미분값에 집중하기보다는 미분을 하는 이유에 집중해서 공부해보자.) 우리에게 익숙한 함수인 Sigmoid function이 주로 쓰이다가, 다양한 함수들을 적용해보며 특정 함수가 영상 인식, 자연어처리 등 특정 분야에 훌륭한 결과를 보..
[백준] 1725 히스토그램 - Java
[백준] 1725 히스토그램 - Java
2021.11.17스택에 인덱스를 넣어주고 따로 배열을 설정해 배열에는 직사각형의 높이에 대한 정보를 넣었다. 넓이를 구하는 과정은 이전에 탐색한 직사각형의 높이가 현재 탐색하고 있는 직사각형의 높이보다 높을 때이다. 이 때를 기준으로 지금까지 쌓아온 스택 인덱스에 해당하는 직사각형의 높이들을 현재 탐색하고 있는 높이보다 작거나 같은 높이들을 대상으로 하나씩 pop해주며 넓이를 계산한다. 차례차례 pop을 진행해주며 넓이를 구해주는데, 이 과정은 코드를 참고하자. 이후 pop 과정 수행 후 스택에 남아있는 원소들에 대해서도 처리해주기 위해 다시 pop을 수행한 후 출력해줬다. import java.util.*; public class Main { public static void main(String[] args) { S..
[백준] 1016 제곱ㄴㄴ수 - Java
[백준] 1016 제곱ㄴㄴ수 - Java
2021.11.17얼핏 보기에는 쉬워 보이는 문제이다. 1부터 자기 자신까지 전부 다 나눠보는 방식으로도 접근할 수 있긴 하지만.. 문제 조건에서 주어지는 수의 범위가 너무 크기 때문에 위의 방법대로 접근하면 시간초과 문제가 발생한다. 어떤 수의 제곱에 관련된 수가 있었는데... 소수를 찾을 때 사용했던 에라토스테네스의 체 알고리즘에서 제곱수를 다룬 적이 있었다. 이 알고리즘으로 접근해보자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); long min = sc.nextLong(); lon..
Deep Learning - Backpropagation
Deep Learning - Backpropagation
2021.11.14단일 층으로 구성돼있는 Neural Network에는 Gradient Descent를 사용하는게 합리적이다. Backpropagation은 여러 층으로 구성된 상황에서 오류가 최소가 되는 가중치 w를 결정하는 방법이다. 기본적인 틀은 Gradient Descent를 따른다. 먼저 Computation Graphs와 Loss function을 정의한다. Loss 함수는 평가지표를 위해 정의한다. (Cost 함수로도 불림) 입력값과 weight(가중치)를 통해 출력값을 도출한다. (FORWARD DIRECTION) 이 때 처음 가중치는 무작위로 정한다. (Gradient Descent와 비슷함) 다음으로 출력값과 정답값을 통해 Loss를 계산하고. Loss를 통해 가중치를 업데이트한다. (BACKWARD D..
[백준] 6549 히스토그램에서 가장 큰 직사각형 - Java
[백준] 6549 히스토그램에서 가장 큰 직사각형 - Java
2021.11.14https://13months.tistory.com/100 [백준] 1725 히스토그램 - Java 스택에 인덱스를 넣어주고 따로 배열을 설정해 배열에는 직사각형의 높이에 대한 정보를 넣었다. 넓이를 구하는 과정은 이전에 탐색한 직사각형의 높이가 현재 탐색하고 있는 직사각형의 높이 13months.tistory.com 위의 문제를 풀고 오니 이번 문제는 덤으로 같이 주는 느낌이였다. 입력 방법의 차이가 있을 뿐 풀이법은 같다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder();..
Deep Learning (2)
Deep Learning (2)
2021.11.14Neuron 은 신경계를 구성하는 세포이다. 지난 시간에 Deep Neural Network를 배웠는데, 여기서 Neural 단어는 딥러닝이 인간의 두뇌와 유사한 과정으로 동작하기 때문이다. 사진이 뇌 속의 뉴런인데, 뉴런 그 자체는 간단하다. 전기적 자극을 받아들이고 활성화할지, 비활성화할지 결정하는 간단한 동작을 수행한다. 하지만 뉴런들이 붙고, 그루핑하고, Network를 형성하게 되면 훨씬 복잡한 생각을 할 수 있게 된다. 뉴런의 기본적인 동작 방식이다. 한 뉴런의 출력을 다른 뉴런이 입력으로 받아들이고, 위의 과정을 반복한다. 뉴런들의 동작 방식을 연구한 결과 인공신경망(Perceptron)이 발명됐다. 입력값들을 받아들이고, (x0 ~ xn) 각각의 입력에 weight를 붙여준다 (w0~wn)..
Deep Learning (1)
Deep Learning (1)
2021.11.14전통적인 Machine Learning에 어떤 문제가 있어서 Deep Learning이 도입됐고, Deep Learning이 그 문제를 어떻게 극복했는지에 대해 알아보자. 머신러닝에서 경사하강법 (Gradient Descent) 방법을 통해 Cost를 최소화했다. 딥러닝도 Cost를 최소화하는 관점에서는 동일하지만, 딥러닝에 경사하강법을 사용할 수 없다. 모듈의 복잡도가 훨씬 복잡해지는 등 여러 가지 문제가 발생했기 때문인데 뒤에서 자세히 알아보자. 경사하강법을 사용하지 않는 대신, 딥러닝에서는 경사하강법에 기반하지만 좀 더 복잡한 문제에 적용할 수 있는 매커니즘인 Backpropagation(오류 역전파 알고리즘)을 사용해 Cost를 최소화한다. 이렇듯 최신 기술인 Backpropagation을 이해하..
[Java] 쓰레드 (Thread) 2
[Java] 쓰레드 (Thread) 2
2021.11.12함수를 쓰게 되면 운영체제가 자신의 시스템에 맞게 조절을 하게 되어, 프로그래머가 컨트롤 할 수 있는 부분이 그렇게 크지는 않다. 하지만, 이런 제한된 컨트롤 가능 범위 내에서 쓰레드의 실행을 어떻게 제어할 것인지를 알아보자. 쓰레드의 실행을 제어하기 위해 사용하는 메서드들을 살펴보자. 이 메서드들 중에서 stop suspend resume 메서드는 호환성을 위해서 정의돼있긴 하지만, 쓰레드의 비정상적인 종료에 큰 영향을 미치는 메서드들이기 때문에 자바에서 사용을 권장하지 않는다. 이 메서드들을 하나하나 살펴보기 전에 쓰레드의 상태에 대해 알고있어야 한다. 쓰레드에는 여러 가지 상태가 있는데, 쓰레드의 여러 가지 메서드들을 통해 어떤 상태를 다른 상태로 바꿔 줄 수도 있다. 일단 start() 메서드를 ..
[Android] 쓰레드와 핸들러
[Android] 쓰레드와 핸들러
2021.11.12메인액티비티는 화면을 가지고, 이벤트가 발생했을 때 처리해 주는 역할을 수행한다. 메인액티비티에는 메인 쓰레드가 만들어져 있고, 이벤트가 발생해 이벤트 큐에 저장된 이벤트들을 메인쓰레드가 하나씩 실행시킨다. (메인액티비티에는 하나의 프로세스가 있고, 프로세스 안에 쓰레드가 있다.) 메인 이벤트가 한 가지 일을 처리하고 있을 때, 그 일처리가 끝나기 전에는 다른 동작을 할 수 없다. 예를 들면, 버튼을 눌렀을 때 용량이 큰 파일 하나를 다운받는 프로그램을 만들었다고 하자. 이 때 파일의 다운로드가 끝나기 전까지 화면의 어떤 버튼을 눌러도 화면이 바뀌지 않고 멈춘 상태를 유지한다. 이 때 쓰레드를 하나 더 만들어 위 상황을 해결할 수 있다. 메인 쓰레드가 하는 일을 별도로 쓰레드를 만들고 그 쓰레드에게 지정..
[Java] 쓰레드 (Thread) 1
[Java] 쓰레드 (Thread) 1
2021.11.08시스템프로그래밍(시스템 자원을 쓰는것) / 운영체제(Operating System)에서 자세하게 다루는 부분이다. 어떻게 활용하는지에 초점을 맞춰 공부해보자. 프로세스 : 프로그램의 단위 하나의 프로그램이 실행될 때 하나의 프로세스에 할당돼 실행된다. PID(Process ID) 인터넷 익스플로어, 크롬.. 등등 여러 가지 프로그램들이 하나의 프로세스로써 돌아간다. 아니 그러면 한 번에 하나의 프로그램만 쓸 수 있나?? 라고 생각할 수 있다. 과거 DOS라는 운영체제는 멀티태스킹을 지원하지 않아 실제로 한 번에 두 가지 이상의 프로그램을 사용할 수 없었다. 하지만, 운영체제가 Windows 로 넘어가면서 멀티태스킹을 지원해 여러 가지 프로그램들을 한 번에 띄울 수 있게 됐다. 쓰레드는 프로세스를 가볍게 ..