분류 전체보기
[백준] 2702 초6수학 - Java
[백준] 2702 초6수학 - Java
2021.10.29유클리드 호제법으로 최대공약수를 구하고 풀어주는 문제이다. import java.util.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); int cycle = sc.nextInt(); for (int i = 0; i b while (b..
최대공약수와 최소공배수 - 유클리드 호제법
최대공약수와 최소공배수 - 유클리드 호제법
2021.10.293과 8의 최대공약수와 최소공배수는 얼마인가? 1과 24이다. 2와 4의 최대공약수와 최소공배수는 얼마인가? 2와 4이다. 12와 28의 최대공약수와 최소공배수는 얼마인가? 4와 96이다. 어떻게 구하는지 설명하라고 하면 매끄럽게 설명하기는 힘든데 구하라고 하면 잘 구한다. 그냥 직관적으로 딱 나오는 경우도 있고, FM대로 하면 두 수의 약수를 싹다 구하고 공통된거 찾아서.... 이렇게 구하는 방법이 있긴 하다. 그런데 알고리즘 문제를 푸는데 최대공약수와 최소공배수 개념이 나왔다? 컴퓨터에게 하나 하나 논리적으로 설명해야 한다... 어떻게 최대공약수와 최소공배수를 구하는지 알아보자. 최대공약수 (Greatest Common Divisor) 말 그대로 공통 + 가장 큰 약수라는 의미이다. 최대공약수를 구하..
[Java] 예외처리
[Java] 예외처리
2021.10.29런타임 시 발생하는 오류를 처리해 주자. 어떻게 사용하는지에 집중해 알아보자. try { }catch (Exception e) { } 위와 같은 형식으로 작성된다. 예외가 발생하면 발생한 예외와 일치하는 catch블럭을 확인하고, catch 블럭 내의 문장을 수행한다. 그 다음 전체 try-catch 문을 빠져나가서 다음 코드를 계속해서 수행한다. 예외가 발생하지 않으면 catch 블럭을 무시하고 전체 try-catch 문을 빠져나가서 다음 코드를 계속해서 수행한다. throw로 고의로 예외를 발생시킬 수 있다. Exception은 모든 예외들의 최고 조상이며, 모든 종류의 예외를 처리할 때는 Exception을 선언해 편하게 처리할 수 있다. Exception e = new Exception("고의로발..
[Java] 객체지향 요약
[Java] 객체지향 요약
2021.10.29코드의 재사용성 / 유지보수 / 중복된 코드의 제거에 집중해 객체지향 개념을 공부하자. 클래스 : 객체를 정의해 놓은 것. 객체를 생성하는데 사용된다. (클래스와 객체는 다르다.) 여기서 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다. (객체는 인스턴스라고도 불린다.) 객체를 생성하기 위해서는 클래스를 먼저 정의해야 한다. Java에서도 프로그래밍을 휘애 유용한 클래스들을 많이 제공한다. 입력받을 때 사용하는 Scanner, 문자열을 정의할 때 사용하는 String 등.. 여러 가지 클래스들이 있다. Scanner sc = new Scanner(System.in); 위의 코드를 읽어보면, Scanner 클래스 타입의 참조변수 sc를 선언 후 new 연산자를 통해 Scanner 인스턴스(객체..
[백준] 1159 농구 경기 - Java
[백준] 1159 농구 경기 - Java
2021.10.29간단한 문제지만 char을 다루는 테크닉을 점검할 수 있는 문제이다. 알파벳 소문자의 개수는 26개인데, 넉넉하게 배열의 크기를 30으로 잡고 처리했다. 'a' 를 더하거나 빼줌으로 int 배열의 인덱스를 문제 풀이에 활용할 수 있다. 코드를 통해 확인하자. 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(); String[] arr = new String[cycle]; for (int i = 0; i < cycle; i++) { a..
[백준] 1100 하얀 칸 - Java
[백준] 1100 하얀 칸 - Java
2021.10.29간단한 문제다. String타입의 이차원 배열을 선언하고 배열을 완성시킨 다음 하얀 칸 위에 있는 말의 개수를 세 주면 된다. 체스판을 이차원 좌표평면에 표현했을 때 x와 y 값의 합이 짝수이면 하얀 칸임을 이용하자. 사실 이 부분은 센스가 필요하다. 생각해내지 못했으면 이제 알았으니까 다음에는 스스로 생각해 낼 수 있으면 된다. 문제를 많이 풀어서 센스를 기르고 문제 해결력을 기르자. 코드를 통해 확인하자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[][] arr = new String[8][]; for(int i=0; i
[백준] 1874 스택 수열 - Java
[백준] 1874 스택 수열 - Java
2021.10.29다 풀고 나서 사소한 실수 때문에 1시간동안 삽질을 한 문제이다. 문제 이해가 정말정말 중요하다. 예시와 내가 푼 방법으로 간단하게 설명해 보면, 8 4 3 6 8 7 5 2 1 예시로 왼쪽과 같이 입력받았다고 하자. 처음 입력값은 4 이다. stack에 4번 push를 진행한다. => stack = {1,2,3,4} 출력 결과 = {} 입력값이 4 이므로 pop을 수행한다. => stack = {1,2,3} 출력 결과 = {4} 다음 입력값은 3 이다. 이미 스택에 1.2.3.이 있기 때문에 pop으로 꺼내준다. => stack = {1,2} 출력 결과 = {4,3} 다음 입력값은 6 이다. 스택에 6은 없다. push를 진행하자. 이 때. push하는 수는 이전의 입력값 중 가장 큰 수 +1 이다. ..
[백준] 1935 후위 표기식2 - Java
[백준] 1935 후위 표기식2 - Java
2021.10.29후위 표기식 문제이다. 지난 시간에 푼 문제는 평범한 식을 후위 표기식으로 변환하는 문제였다면 이번 문제는 반대로 후위 표기식을 평범한 식으로 변환하는 문제이다. 사실 변환할 필요는 없고, 문자에 대한 값이 주어졌을 때 후위 표기식으로 표현된 식의 연산 결과를 구할 수 있으면 된다. 풀이 방법은 간단하다. 문자가 입력되면 문자에 해당하는 값을 스택에 넣어주고 연산자가 입력되면 스택에 있는 값 두 개를 빼서 연산자로 연산을 진행한다. 문자의 값을 지정해 주는 아이디어가 생각이 안 날 수 있는데 double 타입의 배열과 char을 이용해서 처리해 줬다. 코드를 통해 알아보자. import java.util.*; public class Main2 { public static void main(String[]..
[백준] 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..