분류 전체보기
[백준] 23056 참가자 명단 - Java
[백준] 23056 참가자 명단 - Java
2021.10.31정렬 문제인데.. 조건이 까다롭다. 학급번호가 홀수인 학급을 청팀으로, 짝수인 학급을 백팀으로 나눈 다음 청팀을 먼저 출력하고 백팀을 나중에 출력한다. 학급별로 참가자를 출력하는데, 이름의 길이는 오름차순으로 출력하되 길이가 같으면 사전순으로 출력한다. 신청 가능한 수를 입력받는데 이 수보다 더 많이 참여할 수는 없다. 위 조건을 고려하면서 코드를 작성해야 한다. 코드를 통해 알아보자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int M = sc.nextInt(); // N은 학급 수 M 은 신청 ..
소수 찾기
소수 찾기
2021.10.302 3 5 7 11 13 17 19 .... 1과 자기 자신만을 약수로 가지는 수를 소수라고 한다. 소수가 아닌 양의 정수를 합성수라고 부른다. 소수를 왜 알아야되지.. 싶기도 한데 알고리즘 문제에서 소수를 구하라고 한다. 그리고 수능 수학을 공부할 때도 확률과통계 과목에서 소인수분해를 통해 여러 경우의 수를 찾기도 했고.. 소수를 구하는 방법을 컴퓨터에게 어떻게 설명할 지 알아보자. 가장 처음으로 떠오르는 생각으로는 1~N 까지 싹다 나눠보면서 접근하는 방법이다. 코드로 살펴보면 public static boolean primecheck(int number) { if (number < 2) { return false; } if (number == 2) { return true; } for (int i ..
[백준] 10845 큐 - Java
[백준] 10845 큐 - Java
2021.10.30큐를 활용해도 되고, 큐를 구체화한 덱을 활용해도 된다. 큐에 대해 알고 있다면 그냥 하라는대로 구현만 하면 되는 문제이다. import java.util.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int cycle = sc.nextInt(); sc.nextLine(); Deque q = new LinkedList(); for(int i=0; i
[Java] 래퍼 클래스 (Wrapper)
[Java] 래퍼 클래스 (Wrapper)
2021.10.29객체지향 언어인 자바에서도 모든 것을 객체로 다루진 않고, 8개의 기본형 타입이 있다. 하지만, 때로는 기본형 변수도 객체로 다뤄야 할 때가 있다. 지네릭스 타입을 설정할때.. 매개변수로 객체를 요구할때.... 등등 많은 경우가 있다. 이를 처리해 주는 래퍼 클래스에 대해 간단히 알아보자. 8개의 기본형을 대표하는 8개의 래퍼클래스로 기본형 값을 객체로 다룰 수 있다. char -> Character / int -> Integer 말고는 앞글자를 대문자로 바꾼 형태이다. 문자열을 숫자로 변환할 때 많이 쓰던 Integer.parseInt() 메서드도 래퍼클래스의 메서드이다. 원래는 Integer.parseInt() 메서드는 int로 변환하고, Integer.valueOf() 메서드는 Integer 타입을..
[백준] 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[]..