자바 97

[백준, 자바, 1392번] 노래 악보

풀이 해당 문제를 처음 보았을 때 무슨 말이야 했는데 단순히 질문하는 시간에 몇 번째 노래가 나오고 있는지 물어보는 문제로 우선 노래 시간을 배열에 추가할 때 입력값 + 누적값 -1을 추가하여 셋팅한 다음 2중 for문으로 입력된 질문 시간에 따라 질문 시간이 특정 배열의 시간보다 작거나 같다면 출력하는 식으로 해결 import java.io.*; import java.util.*; public class 노래악보 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new Stri..

알고리즘 2024.01.08

[백준, 자바, 1362번] 펫

풀이 해당 문제는 단순하게 풀 수 있는 문제로 현재 체중이 적정 체중의 1/2 초과 2배 미만으로 있는지에 대한 여부와 0이하의 체중 그리고 이외 이렇게 분류해서 해결할 수 있는데 여기서 간과했던 부분으로는 문제의 마지막에 있는 문장으로 ` 매 작용이 끝날 때마다 펫은 자신의 상태를 표시하며, 펫이 중간에 죽는다면 이후의 작용은 무시됩니다.` 위 조건을 적용해야 해결이 되기에 state를 두어 해결 할 수 있도록 함. import java.io.*; import java.util.*; public class 펫 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new Input..

알고리즘 2024.01.03

[백준, 자바, 1357번] 뒤집힌 덧셈

풀이 해당 문제는 아주 간단하게 해결할 수 있었는데 자바에서는 파이썬 처럼 자유롭게? 형 변환이 안되어 조금 걸렸다. 해결 방법으로는 x,y의 값을 처음에는 배열로 바꿔서 다시 값을 합치고 해야하는 줄 알았지만 간단하게 x,y 값을 바로 reverse 시키는 방법이 있어서 해당 방법으로 해결 다만 바로 reverse 시키고자 한다면 StringBuilder 클래스를 사용해서 값을 인자로 넣고 이후 .reverse() 시킨다면 해결 가능! import java.io.*; import java.util.*; public class 뒤집힌덧셈 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedR..

알고리즘 2024.01.03

[백준, 자바, 1296번] 팀 이름 정하기

풀이 처음 해당 문제를 해결하고자 했을 때는 맵을 사용해서 해결하고자 했지만 수치 변경 이외엔 너무 불편하여 배열을 사용하여 해결하고자 했으며 각 팀 이름에 대한 비율을 새로 계산해야 했기에 deepcopy를 사용하여 해결. import java.io.*; import java.util.*; public class 팀이름정하기 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String yeon = br.readLine(); ArrayList li = new ArrayList(Collections.nCopies(4..

알고리즘 2024.01.02

[백준, 자바, 1225번] 이상한 곱셈

풀이 해당 문제는 단순히 각 자리의 값을 곱하는 2중 for문으로 접근하여 해결하려 하니까 시간 초과가 계속 발생해서 방법을 찾아보니 각 자리의 합을 먼저 구한 다음 곱하면 된다는 것을 알게 되어 아래와 같이 간단하게 해결할 수 있었다. 추가 학습 파이썬은 위와 같이 적용했을때 되었는데 자바에선 왜 안되는건지 생각해보다가 혹시 int의 초과 값 때문인건지 생각이 들어 Long으로 타입을 변경 후 제출하니 해결할 수 있었다. import java.io.*; import java.util.*; public class 이상한곱셈 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(ne..

알고리즘 2023.12.29

[백준, 자바, 1015번] 수열 정렬

풀이 해당 문제는 무슨 말인가 하다가 입력값과 출력값을 확인해보니 큰 순서에 따라 번호를 메기는 문제로 파악하여 아래와 같이 해결할 수 있었다. 우선 result는 입력 받는 배열의 크기만큼 생성 후 초기값을 따로 설정하고 이후 2중 for문으로 계속 처음부터 조회할 수 있도록 했으며 result[j] 가 초기값 -1이 아닐 경우엔 넘어가고 low 값보다 result[j]가 작다면 변경 후 idx 또한 함께 바꾼다음 반복문이 마치면 그때 result 값을 변경해줘서 문제를 해결. 추가 학습 자바에서 ArrayList로 원하는 크기로 초기값을 넣어주고 싶다면 new ArrayList( Collections.nCopies(num, value) ) li.get(j)) { low = li.get(j); idx ..

알고리즘 2023.12.28

[백준, 자바, 1264번] 모음의 개수

풀이 해당 문제는 처음엔 각 모음의 개수를 출력할 줄 알았지만 난이도인 만큼 전체 개수를 조회하는 문제로 입력받은 문장을 모두 소문자로 변경한 다음 값이 배열안에 있다면 카운팅하는 것으로 해결 물론 초음에 모음을 담은 li를 set로 하면 파이썬에서는 hash로 접근하여 인덱스로 찾게되어 더 빠르게 조회가 가능하지만 따로 시간에 대한 여유가 있어 익숙한 배열로 문제 해결. 그리고 조건을 활용하여 반복문 탈출이 가능하도록 하기. 추가 학습 자바에서 배열 생성시 초기값으로 원하는 값을 넣고자 한다면 List 으로 설정 후 Arrays.asList() 안에 값을 넣어주면 된다. import java.io.*; import java.util.*; public class 모음의개수 { public static v..

알고리즘 2023.12.28

[백준, 자바, 1236번] 성 지키기

풀이 해당 문제는 간단하게 각 행과 열에 경비병이 있는지에 대한 유무를 조사하며 카운팅하면 되는 문제인데 다만 문제점으로는 정사각형이 아닌 직사각형이기에 조금 귀찮은 문제이다, 그래서 따로 2중 for문을 주어 해결할 수 있었다. import java.io.*; import java.util.*; public class 성지키기 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st1 = new StringTokenizer(br.readLine()); int n = Integer.pars..

알고리즘 2023.12.27

[백준, 자바, 1138번] 한 줄로 서기

풀이 해당 알고리즘에 대해 어떻게 접근해야할지에 대한 고민을 오래했지만 잘 떠오르지 않아서 다른 분들의 풀이를 확인 후 조금씩 이해할 수 있었다. 우선 가장 문제였던 부분이 아래와 같다. 나의 키보다 큰 사람이 왼쪽에 입력 받은 수 만큼 있어야 하는 것. 입력 받은 수가 같을 경우. 그래서 다른 분들의 풀이를 참고하여 이해할 수 있었지만 해당 유형과 비슷한 문제들을 좀 더 풀어봐야 확실한 이해를 할 수 있을것 같다. 우선 위 문제였던 부분에 대한 해결법으로는 조건식을 통해 cnt와 입력 받은 값이 같은지 그리고 result[j]의 값이 아직 채워지지 않았는지 확인. import java.io.*; import java.util.*; public class 한줄로서기 { public static void ..

알고리즘 2023.12.26