본문 바로가기

알고리즘 공부...공......공12

[백준: 알고리즘_Java] 11655번_ROT13 앞의 알파벳 개수 세는 문제와 마찬가지로, 이 문제도 아스키코드를 이용하면 쉽게 풀리는 문제이다. 입력받은 문자열을 char배열에 넣고 for문으로 앞에서부터 검사한다. char배열의 문자를 int로 형변환 해주어 아스키코드로 변환한다. 변환한 문자가 대문자일때와 소문자일때로 나눔(아스키코드로) 대문자, 소문자의 경우 각각 아스키코드에서 13을 더했을 때 그 범위를 넘어가면 +13대신 -13 해주면 됨(알파벳이 각각 26개라 가능) import java.util.*; import java.io.*; public class ROT13 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRea.. 2022. 1. 17.
[백준: 알고리즘_Java] 10808번_알파벳 개수 이걸 첨에 봤을땐.. 알파벳마다 일일이 조건문을 넣어서 해야되나 잠깐! 아주 잠깐!!! 고민했는데 그건 너무 아닌 것 같아서 생각해보니.. 아스키코드가 떠올랐다. 매우매우매우매우~~쉬움. ASCII 코드 표 위의 표를 보면 a~z까지의 문자는 10진수로 각각 97~122이므로, 이를 이용해 반복문으로 개수를 확인해 주면 된다. count배열의 인덱스 0~25까지를 a~z로 생각하여, 입력값의 각 문자의 아스키코드에서 97을 뺀 값을 인덱스로 설정하여 해당 값에 +1 해준다. import java.io.*; import java.util.Arrays; public class Alphabet_count { public static void main(String[] args) throws IOException.. 2022. 1. 14.
[백준: 알고리즘_Java] 1158번_요세푸스 문제 이 문제는 사실.... 2학기 중간고사때 나온 문제와 거의 비슷함.... 근데 내가 그때 문제를 잘못 이해해서 틀렸음...까비 이번에는 제대로 이해해 보는 것으로,... 개 쉬운 문젠데.. Queue 의 FIFO(First In First Out: 제일 먼저 저장한 것을 제일 먼저 꺼낸다.) 특징을 이용하면 됨. 순서대로 K번째 사람을 제거한다고 했으므로,, K번째 전까진 꺼낸다음 다시 위에 쌓아주면 됨. (원으로 앉아있으니까) K번째 사람은 ArrayList arr에 add해줌. 이걸 반복. 나는 try-catch문을 사용해서 queue의 값을 모두 꺼냈다면(=queue가 비었다면= NullPointException발생) 무한 반복문을 빠져나가도록 코드를 짰다. 출력은 arr를 String으로 바꿔주고.. 2022. 1. 13.
[백준: 알고리즘_Java] 9613번_GCD 합 어제 풀었던 문제에서 최대공약수를 구하는 방법을 알았응께 그 방법을 쓰면 되겄슈. 근데 각 테스트 케이스에서 가능한 모든 쌍의 GCD(최대공약수)의 합을 구하는 것잉께 반복문을 이용했슈,, 테스트 케이스의 수들을 배열 inpnut 에 넣은 뒤, 예들들어 테스트 케이스의 숫자들이 4개라 하면 input[1] - input[2],input[3],input[4] input[2] - input[3],input[4] input[3] - input[4] 의 짝으로 GCD를 구해서 더하면 되는 것이다. 여기서 주의점은! 테스트 케이스의 수가 100, 입력으로 주어지는 수가 1000000으로 구성되면 GCD의 합들이 int의 범위를 넘어가므로 합을 구하는 변수는 long으로 설정해야한다. import java.util.. 2022. 1. 7.
[백준: 알고리즘_Java] 2609번_최대공약수와 최소공배수 처음에 문제를 딱 봤을땐 아 개쉽네~~ㅋㅋ 이었지만 살짝 더 생각해보니....어라라? 어떻게 구하드라...? 가 되어버렸다. 그래서 급하게 한 구글링.. 어떻게 최소 공배수를 구할 수 있을깡?? ※ 방법은 바로 유클리드 호제법!! 이다,, (이름은 초면이지만.. 사실 1학기 이산수학때 살짝 배웠었네..엽!) ♠ 호제법인 이유~~식이? 서로 호, 나눌 제 -> 서로 나눈다앙~ 1. r = A % B (%: 나눈 나머지) 2. GCD(A, B) = GCD(B, r) ~를 이용하면 되미당!! 예시 GCD(581, 322) = GCD(322, 259) = GCD(259, 63) = GCD(63, 7) = GCD(7, 0) = 7 (-> 최대공약수) 원리를 설명해 보자미언.. 살짝 복잡식이 그시기하긴 한데.. 큼.. 2022. 1. 7.
[백준: 알고리즘_Java] 10430번_나머지 너어어어~~~무 쉬운 10430번 30초 컷임 ㄹㅇ 진짜 개쉬움. 그냥 Scanner.nextInt()로 숫자 세개 받고 System.out.println()으로 각 식 복붙해주면 됨 (x->*로 바꾸고) 끄으으으읕!! import java.util.*; public class Rest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A = sc.nextInt(); int B = sc.nextInt(); int C = sc.nextInt(); System.out.println((A+B)%C); System.out.println(((A%C)+(B%C))%C); System.out.println((A*B)%.. 2022. 1. 6.