분류 전체보기
[백준] 1918 후위 표기식 - Java
[백준] 1918 후위 표기식 - Java
2021.10.29문제 이해는 어렵지 않은데 어떻게 풀어야 할 지 정말 고민을 많이 한 문제이다. 스택의 관점에서 생각해보자. 연산자 : + - * / 문자 : A~Z 스택과 문자열을 만들고, 스택에 어떤 연산자가 들어가있는지에 따라 연산자에 대한 처리를 해 줘야 한다. 연산자의 우선순위도 정해진다. + - 는 * / 보다 우선순위가 떨어진다. 1. 문자가 입력되면 바로 출력한다. 2. 연산자가 입력되면 스택의 가장 위쪽에 들어가 있는 연산자의 종류에 따라서 다른 연산을 한다. 2-1. 입력된 연산자의 우선순위가 스택의 꼭대기에 들어있는 연산자의 우선순위보다 높을 때, 스택의 요소를 하나하나 지우고 지운 값을 출력한다. 스택의 꼭대기에 들어있는 연산자의 우선순위가 입력된 연산자의 우선순위보다 작을 때 까지 반복한다. 3...
[백준] 10799 쇠막대기 - Java
[백준] 10799 쇠막대기 - Java
2021.10.29문제 이해가 정말정말 중요하다. 종이에 몇 번 써 보고 직접 세 보는 등 문제를 먼저 이해하자. 1. ( ) 가 연속으로 나오면 레이저를 쏜다. 2. ) 전에 ( 가 나오지 않았으면 막대기를 완성한다. 이제 어떻게 셀 지 생각해 봐야 한다. 레이저를 한 번 쏠때 막대가 몇 개 생기는지에 대해 생각해 봤다. ( 로 막대 계층이 높아지면 그 층 수 만큼 막대가 생긴다. 이 문제도 스택으로 분류된 문제니 스택으로 코드를 짜 보자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); Stack st = n..
[백준] 9012 괄호 - Java
[백준] 9012 괄호 - Java
2021.10.29문제를 읽고 생각해보자. "()" 속에 VPS가 올 수 있다. VPS끼리 concatenation은 가능하다. 처음에는 감이 안잡혔는데 알고리즘 분류가 스택이니까 스택의 관점에서 고민해봤다. 1. '(' 와 ')' 의 개수는 같아야 한다. ( "()" 는 한 세트로 움직인다 ) 2. '(' 가 먼저 들어와야지 ')' 를 입력받을 수 있다. 위를 바탕으로 코드를 작성했다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int cycle = sc.nextInt(); sc.ne..
[Android] 인텐트와 프로그레스바 사용하기
[Android] 인텐트와 프로그레스바 사용하기
2021.10.28프로그레스 바를 사용해 보고 인텐트를 통해 화면 전환 동작을 수행하는 앱을 만들어 보자. 소스코드 더보기 // MainActivity package kprogressbar; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import org.w3c.dom.Text; public class Ma..
[Java] 스트림 (Stream)
[Java] 스트림 (Stream)
2021.10.25많은 수의 데이터를 다룰 때, 컬렉션이나 배열을 활용했다. 물론 이렇게 데이터를 다루는 방법도 매우 효과적이지만, 이런 방식으로 작성된 코드는 가독성이 좋지 않고, 재사용성이 떨어지는 등 여러 가지 단점이 있다. 이런 단점들을 극복하기 위해 스트림이 만들어졌다. 스트림은 데이터 소스를 추상화하고 데이터를 다룰 때 자주 사용되는 메서드들을 정의해 뒀다. 바로 코드를 통해 알아보자. String 배열을 생성하고, 그 배열을 소스로 스트림을 생성한다. (배열 말고도 LinkedList, ArrayList 등 여러 가지가 소스가 될 수 있다) 이 다음 스트림의 여러 가지 메서드들을 읽어보자. String은 Comparable이 정의돼있기 때문에(순서가 정의돼있기 때문에) sort 메서드로 정렬이 가능하다. 위의..
[Java] 람다식 (Lambda expression)
[Java] 람다식 (Lambda expression)
2021.10.25모든 걸 객체로 생각하는 객체지향언어인 자바가 JDK1.8부터 람다식을 추가함으로써 자바는 객체지향언어인 동시에 함수형 언어가 됐다. 람다식을 어떻게 사용하는지에 초점을 맞춰 공부해보자. 함수(자바에서는 메서드)를 다룰 때 세 가지 특징이 있다. 1. 함수 자체를 변수로 저장할 수 있다. 2. 함수를 다른 함수의 매개변수로 쓸 수 있다. 3. 함수 자체를 반환할 수 있다. 위의 세 가지 특징을 만족하는 함수를 일급함수라고 한다. 함수형 언어는 일급함수를 지원하고, 지원하기 위한 다양한 특징이 있다. 자바도 일급함수를 지원하고 싶었고, 이 생각에 기반해 람다식이 등장했다. 함수 자체를 변수로 저장해야 하는데, 함수 자체에도 이름이 있다. 그렇기에 변수의 이름과 함수의 이름이 충돌이 있을 수 있다. 이를 해..
[Android] 여러 화면 간 전환
[Android] 여러 화면 간 전환
2021.10.25처음 안드로이드 프로젝트를 생성하면, XML파일(activity_main.xml)과 자바 소스 파일(MainActivity.java)이 생성된다. 자바 소스코드의 R.layout.activity_main 코드는 이 두 파일을 연결해준다. (R은 res폴더를, layout은 res폴더 안의 layout폴더를 의미함) 인플레이션은 XML 레이아웃에 정의된 내용(디자인도구를 이용해 만든 버튼, 텍스트뷰 등..)이 메모리에 객체화 되는 과정을 말한다. (버튼의 상태를 정의) 자바 코드에 정의하고, 실제로 객체가 되려면 메모리에 기억장소를 할당받아야 한다. 그 역할을 인플레이션이라고 한다. MainActivity 코드에서 setContentView가 인플레이션 과정을 수행한다. 위의 코드에서 setContentV..
Machine Leaning - Overfitting
Machine Leaning - Overfitting
2021.10.24지난 시간에 Linear Model의 Regression과 Classification을 배우고 Gradient Descent에 대해 배웠다. 그러면 배운 걸 바탕으로 딥러닝, 머신러닝에 바로 활용하면 참 좋은데.. 그냥 가져다 쓰면 여러 가지 문제점이 생긴다. 1. Overfitting (해결책). Regularization Overfitting. 무언가 굉장히 타이트하게 맞는다는거다. 어느 특정한 데이터에 대해서 딱 들어맞고, variation이 조금이라도 있으면 원하는 값을 얻을 수 없는 문제이다. 딥러닝을 할 때 발생하는 대표적인 문제인데, 이 문제를 해결하기 위해 Regularization을 활용한다. ML과 DL의 학습 과정을 살펴보자. (DL은 ML과 세부적인 부분에서는 다르지만, 전체적으로는..
Linear Model - Classification
Linear Model - Classification
2021.10.24지난 시간에 Supervised Learning에서의 Linear Model을 Regression문제에 적용했었다. Regression을 배웠으니 Classification에 적용해보자. 1. Binary Classifier / Logistic Regression 2. Softmax Classifier / Multinomial Logistic Regression Classifier기술은 Regression기술에 의존해 만들어졌기 때문에 Classifier 모델이지만 Logistic Regression처럼 Regression 용어가 쓰인다. 1. Binary Classifier / Logistic Regression Regression 모델로 접근하면 공부 시간에 따른 점수를 예측할 수 있다. 위의 그림처..
[Java] 컬렉션 프레임웍 (Collections Framework)
[Java] 컬렉션 프레임웍 (Collections Framework)
2021.10.19Collection : 데이터 그룹 Framework : 표준화된 프로그래밍 방식 다양한 데이터 타입들을 하나의 그룹으로 모아 처리할 수 있게 해 준다. List Set Map 이 세 가지가 컬렉션 프레임웍의 핵심 인터페이스이다. List와 Set를 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어 공통부분을 Collection 인터페이스로 정의하고 List와 Set는 Collection 인터페이스를 상속받도록 설계했다. 그러니까 정리하면 Collection이 맨 위에 있고 그 밑에 List와 Set, 그리고 List와 Set를 상속받는 친구들이 밑에 있는 형식이다. List로 구현한 ArrayList와 LinkedList, Stack같은 친구들은 Collection과 List의 메서드는 물론 자신의 ..
[Android] 대화상자 사용하기
[Android] 대화상자 사용하기
2021.10.18대화 상자는 사용자에게 메세지를 출력하고 사용자로부터 입력을 받아들이는 사용자 인터페이스이다. 대화 상자는 Dialog클래스를 상속받는다. 여러 가지 종류의 대화 상자가 있으니 상황에 맞게 잘 찾아쓰자. 해당하는 클래스의 객체를 만들고 메서드들을 이용해서 원하는 기능을 구현하는 큰 틀은 똑같다. (사실 이렇게 무슨 기능이 있는지 배워나가는 것보다, 만들고 싶은 프로젝트가 있으면 그 프로젝트를 진행하면서 필요한 건 강의나 책을 찾아서 배우는 방법이 훨씬 나은 방법인것 같다.) 그래도 배운건 정리해야하니까.. 계속 정리해 보면 프로그레스 바를 만들 때 setIndeterminant() 메서드에서 false를 매개변수로 받을시 언제 끝날 지 예상이 가능함을 의미하고 true를 매개변수로 받을 시 언제 끝날 지..
[Android] 간단한 계산기 만들기
[Android] 간단한 계산기 만들기
2021.10.18덧셈만 가능한 간단한 계산기를 만들어보자. 더보기 package kr.ac.cnu.computer.cp2_05; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity { String prevstr = ""; int intresult = 0; int pluscount = 0; boolean pluscheck = false..