백준 14

백준 1267번 - 핸드폰 요금 JAVA

fee[i]/30 하고 +1 해야 한다는걸 검색하고서야 알게 되었다. ㅠ 1. 처음 주어지는 N을 두번째 주어지는 통화시간 배열의 개수라고 생각하고 그만큼 for문을 돌려 배열 안에 통화시간들을 담는다. 2. 영식 요금제와 민식 요금제의 식에 맞춰 각각의 값에 맞는 가격을 계산하여 더한다. 3. 두 값의 대소를 비교하고 양식대로 출력한다. public class Main { public static void main(String[] args) throws Exception{ Scanner in = new Scanner(System.in); int Y = 0; int M = 0; int N = in.nextInt(); int fee[] = new int [N]; for(int i=0; i

Study/알고리즘 2022.08.20

백준 1233번 - 주사위 JAVA

이 문제는 저번에 푼 문제처럼 for문을 여러번 돌리면 된다. 그런데 가장 많이 나온 수는 1157번 - 단어 공부 풀었을 때처럼 max에 자리바꿔주기 하면 되겠지 하면서 쓰다가 출력할 때 답이 여러개일 경우 가장 합이 작은 것을 출력해야 한다는 문구가 있어서 당황했다. 그래서 다른 블로그들을 참고해서 math.max()로 해결했다. math.max란? 두 개의 수 중 더 큰 수를 찾을 때 사용하는 함수이다. 이것으로 가장 많이 발생하는 수를 key에 저장해두고, 다시 for문을 돌려서 제일 작은 수일 때 break하면 된다. public class Main { public static void main(String[] args) throws Exception{ int S1, S2, S3; Scanner..

Study/알고리즘 2022.08.11

백준 1225번 - 이상한 곱셈 JAVA

이 문제는 보자마자 어떻게 풀어야 할지 감이 왔다. 그동안 charAt로 입력받은 문자열에서 한글자씩 떼기를 반복하기도 했고, 구구단 문제처럼 풀면 되겠거니 감이 왔기 때문이다. 그런데..... 쩝..... 사실 세번째부터는 이상한 실수를 해서 그렇게 된 것이지만, 두번째까지는 다른 문제가 있었다. 입력에 10,000자리를 넘지 않는 음이 아닌 정수 라고 적혀있는데, 10000까지의 정수가 아니라 저 자리의 정수라서 매우 큰 수이다. 그래서 숫자라도 int대신 long을 써줘야 한다. import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception{ String A, B; Scanner ..

Study/알고리즘 2022.08.10

1193번 - 분수찾기 JAVA

코드는 짧은데 배열 문제에 약해서 다른 분들의 코드들을 많이 찾아보고 내것으로 만드는 데 오래 걸렸다. 가로세로 배열 문제라서 for문을 2번 돌려서 이중배열로 풀어야 하나 했는데 라인으로 해결하니 훨씬 간단했다. 대각선 라인으로 생각하면 1 : 1/1 2 : 1/2 2/1 3 : 3/1 2/2 1/3 4 : 1/4 2/3 3/2 4/1 5 : 5/1 4/2 3/3 2/4 1/5 라인이 홀수일 경우 분모는 1부터 시작하고 점점 커진다. 분자는 라인수부터 점점 작아진다. 라인이 짝수일 경우 분모는 라인의 숫자이고 점점 작아진다. 분자는 1부터 라인수까지 점점 커진다. X가 주어졌을 때 X가 몇번째 라인에 있는 숫자인지 찾고 X자리를 찾는다. 몇번째 자리에 있는지는 x-i를 통해 찾는다. import jav..

Study/알고리즘 2022.08.05

백준 1173번 - 운동 JAVA

코드는 문제에 써있는대로 그대로 쓰면 된다. 주어지는 숫자 5개 변수 지정하고 맥박+T 하고 만약 최대맥박보다 높으면 휴식하게 만들면 된다. 운동할 때마다 N을 1씩 떨어트리고 운동+휴식한 시간을 모두 더한 count를 출력하면 된다. import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); int N = in.nextInt(); //운동시간 int m = in.nextInt(); //초기맥박 int M = in.nextInt(); //최대맥박 int T = in.nextInt(); //1분 운동 후 증가 맥박 int R = in.nextInt..

Study/알고리즘 2022.08.04

백준 1259번 - 팰린드롬수 JAVA

이 문제는 맨 앞 숫자와 맨 뒷 숫자를 비교해서 같은지 확인하고 두번째 숫자와 맨 뒤의 숫자-1 의 숫자와 비교하고..를 반복하면 되는 문제이다. 그러려면 글자를 하나씩 떼어야 하는데 그러기 위해 또 charAt()를 쓴다. 한글자 떼는걸로 끝나는게 아니라 앞뒤를 비교해야 하기 때문에 글자 수에 맞춘 배열에 차례로 넣었다. import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); String N; //주어지는 수 while (true) { N = in.next(); if (N.equals("0")) break; char [] charN = ne..

Study/알고리즘 2022.08.02

백준 1159번 - 농구 경기 JAVA

이번 문제는 저번에 풀었던 단어공부 문제와 비슷하게 한글자를 떼어서 a를 빼고, 그걸 알파벳 배열 자리에 넣는 방식으로 진행했다. 먼저 이름들을 리스트에 담고, 리스트를 돌리면서 첫글자를 떼서 알파벳 자리에 넣고 중복되는 알파벳이 5개가 넘으면 출력을 할 수 있게 한다. 그런데 이번엔 가장 중복이 많은 글자가 아니라 5개가 넘는건 모두 출력하기 때문에 문자열+문자열을 해야한다. 이걸 간편하게 해줄 수 있는 메소드가 StringBuilder 이다. 문자끼리 더하기 자체는 가능하지만 성능적으로 좋지 않기 때문에 사용하는 메소드인데, 값을 넣을 때는 .append()로 넣고, 값을 꺼낼 때는 StringBuilder나 객체.toString() 으로 호출한다. import java.util.ArrayList; ..

Study/알고리즘 2022.07.30

백준 1157번 - 단어 공부 JAVA

이 문제는 글자 하나하나 떼어서 세는건 저번 알고리즘 문제때 했던 charAt()로 하면 될 것 같은데 알파벳-알파벳의 개수 를 같이 저장시키는걸 어떻게 해야하나에서 고민을 했다. (배열의 자리가 해당 알파벳, 해당 자리의 값을 중복값으로 해결했다) 그리고 .length 로 할 때 빨간줄이 떠서 당황했는데 배열이 아니라 문자의 길이인 경우에는 .length() 를 써야했다. 마지막으로 char형을 쓸 일이 은근 많은 듯 해서 아스키코드를 첫글자정도는 외워둬야 한다는 생각이 들었다. A는 65 a는 97... import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(..

Study/알고리즘 2022.07.28

백준 1145번 - 적어도 대부분의 배수 JAVA

처음에 공배수라고 생각해서 엄청 무식한 방법으로 풀었다가 실패하고; 이건 아닌 것 같아서 방법을 찾다가 완전 탐색 방법을 알게 되었다. 완전탐색이란? 가능한 모든 경우의 수를 탐색하고 확인하는 방법이다. 이 방법은 답이 너무 많거나 범위가 너무 넓으면 어렵지만 이번에는 숫자가 5개밖에 주어지지 않기 때문에 사용할 수 있다. import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); int num[] = new int[5]; for(int i=0; i

Study/알고리즘 2022.07.27

백준 1110번 - 더하기 사이클 JAVA

쉬운 문제였는데 6+8 = 14 이후 1을 버리는 부분을 못보고 넘어가서 고전했다; 입력받는 수는 N, 십의 자릿수와 1의 자릿수를 a,b 사이클을 돌려서 새로 만들어진 수는 newN으로 설정한다. newN의 초기값은 N이고, (b * 10) + (a + b) % 10 한 값을 새로 저장한 뒤 while문을 N과 같아질 때까지 돌리면 되겠다. import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); int N = in.nextInt(); int newN = N, cycle = 0, a = 0, b =0; //a = 10의 자리 b=1의 자리 w..

Study/알고리즘 2022.07.27
1 2