코딩테스트 7

[백준] 1919: 에너그램 만들기

문제 https://www.acmicpc.net/problem/1919 1919번: 애너그램 만들기 두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs www.acmicpc.net 문제 풀이 1. 입력받은 두 문자열의 알파벳 개수를 저장할 두 개의 int형 배열(알파벳 수만큼의 크기)을 선언한다. 2. 입력받은 두 문자열을 전부 문자 배열로 바꾼다. 3. 전부 소문자이기에 대/소문자를 구별할 필요는 없으며, int형 배열 인덱스를 '문자 배열의 아스키 코드 값'을 이용해 접근한다. 4. 두 개의 int형 배열을 돌면서 값을 비교해 개수가 같은 ..

Algorithm/BaekJoon 2023.08.03

[백준] 9020: 골드바흐의 추측

문제 https://www.acmicpc.net/problem/9020 9020번: 골드바흐의 추측 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아 www.acmicpc.net 문제 풀이 1. 문제에서 n의 범위가 10,000까지라고 나와있기에 해당 값을 마지막 인덱스로 갖는 배열을 만들어 에라토스테네스의 체로 소수를 판별해놓는다. 2. 에라토스테네스의 체의 구현에서 중요한 부분은 범위 값이 마지막 인덱스이므로 이 값을 N이라 했을 때 N + 1을 배열의 크기로 갖는 배열을 선언한다. 3. 그리고 for문에서 N의 제곱근 값까지 반복해서 해당 값..

Algorithm/BaekJoon 2023.02.14

[백준] 1157: 단어 공부

문제 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 문제 풀이 알고리즘은 C로만 많이 풀었어서 모르고 있던 사실이 있다. Java에는 소문자, 대문자로 전부 변환해주는 메소드가 있다는 점이다. 이를 활용해서 문제를 풀면 아스키 코드로 대문자, 소문자를 따로 따지지 않아도 돼서 편리하다. 1. 입력받은 문자열을 전부 대문자로 바꿔 저장한다. 2. 전부 대문자로 변환된 문자열로 문자열 배열을 만든다. 3. 각 알파벳이 몇 번 나오는지 세기 위한 알파벳 개수(26개)의 크기를 가진..

Algorithm/BaekJoon 2023.02.08

[Java] 자바 입력 - BufferedReader 개념, 사용법

BufferedReader란? BufferedReader는 Scanner와 유사하다. BufferedReader는 입력 값이 바로 전달되지 않고 버퍼에 모아서 한 번에 전송하므로 입력 효율이 좋다. 버퍼를 사용하지 않는 입력은 키보드의 입력이 키를 누르는 즉시 프로그램으로 바로 전달된다. 버퍼를 사용하는 입력은 키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송한다. 버퍼에 차곡차곡 쌓이고 프로그램에 바로 전달되지 않는다. 버퍼가 가득 차거나, 개행 문자가 나타나면 버퍼의 내용을 한 번에 프로그램으로 전달한다. 키보드 입출력은 생각보다 시간이 많이 걸리는 작업이다. 버퍼링 없이 키보드의 입력될 때마다 입력된 문자 하나씩 바로 전달하는 것보다 중간 단계로 버퍼를 두고 입력 값들을 한 번에 모아 전달하는 게..

Algorithm/Java 2022.11.02

[백준] 10973: 이전 순열 (자바/Java)

문제 https://www.acmicpc.net/problem/10973 10973번: 이전 순열 첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 문제 풀이 주어진 순열의 이전 순열을 구하기만 하면 된다. 이전 순열을 구하는 방법은 다음과 같다. 1. p[i-1] > p[i] 만족하는 가장 큰 i를 찾는다. 2. j >= i 면서 p[j] < p[i-1] 만족하는 가장 큰 j를 찾는다. 3. p[i-1] 과 p[j] 를 swap한다. 4. p[i] 부터 순열을 뒤집는다. 내림차순으로. (i-1이 바뀌었으므로 i부터 재정렬 한다고 생각하면 됨) 코드 import java.io.BufferedR..

Algorithm/BaekJoon 2022.11.02

[백준] 10972: 다음 순열 (자바/Java)

문제 https://www.acmicpc.net/problem/10972 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 문제 풀이 주어진 순열의 다음 순열을 구하기만 하면 된다. 다음 순열을 구하는 방법은 다음과 같다. 1. p[i-1] = i 면서 p[j] > p[i-1] 만족하는 가장 큰 j를 찾는다. 3. p[i-1] 과 p[j] 를 swap한다. 4. p[i] 부터 순열을 뒤집는다. 오름차순으로. (i-1이 바뀌었으므로 i부터 재정렬 한다고 생각하면 됨) 코드 import java.io.BufferedRea..

Algorithm/BaekJoon 2022.11.02