자바 123

[백준, 자바, 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

[백준, 자바, 1063번] 킹

풀이 우선 좌표에 대한 dictionary를 미리 만들어두어 간단하게 방향을 찾을 수 있도록 함. 이후 킹과 돌의 좌표값을 확인한 이후 주어지는 방향에 따른 조건 분기 처리를 하여 좌표 이동을 시킴 여기서 조금 코드가 길어진 부분은 킹은 움직일 수 있지만 돌이 더이상 이동할 범위를 벗어날 경우에 대한 부분으로 물론 더 좋은 코드가 있겠지만 아래와 같이 해결. 추가 학습 우선 파이썬의 dictionary는 HashMap으로 만들며 만드는 동시에 기본값을 넣는 건 안되는건지 우선 아래와 같이 따로 하나식 추가 함. 그리고 substring으로 인자 하나만 넣을 경우 그냥 해당 인덱스에 대한 값을 가져오는 것. 계속 beginIndex라고 나오니까 헷갈렸음... 그리고 붙어있는 문자 중 숫자를 가져올 때는 s..

알고리즘 2023.12.22

[백준, 자바, 1059번] 좋은 구간

풀이 처음에는 해당 문제에 대한 이해가 되질 않았다... 역시 알고리즘은 계속 풀면서 문제 이해하는 능력을 키워야하는 것 같다... 무튼 해당 문제에선 주어지는 집합 S에 해당하는 구간에 n을 포함하는 좋은 구간의 개수를 구하는 것으로 S = [4,8,13,24,30], n = 10 의 경우엔 8과 13 사이에 10이 속하기에 해당 구간에서 8과 13이 포함되지 않은 9와 12 사이에서 찾는것인데 처음엔 여기서 막혔다. 이유는 그러면 [ [9,10], [9,11], [9,12], [10,11], [10,12], [11,12]] 이렇게 되는거 아닌가? 그러다 문제에서 n을 포함하는 좋은 구간의 개수를 구해보자. 라는 말을 확인하게 되어 이해할 수 있었다. 이후 나머지는 간단한 연산 문제이기에 쉽게 해결되었..

알고리즘 2023.12.21

[백준, 자바, 1051번] 숫자 정사각형

풀이 3중 for문을 사용해서 문제를 해결하고자 했으며 n은 범위, m은 가로, x는 n 범위에 따른 세로로 생각하여 문제를 해결하고자 했으며 try, except를 사용한 이유는 mtx의 범위를 벗어날 경우에 break를 걸기위해 사용 그리고 더 빠른 제출을 위한 조건분기로는 큰 범위부터 찾는 것, 찾았다면 해당 for문 멈추기와 같은 것들이 있지만 그렇게까지는 하지 않아도 될 것 같아 그냥 제출 추가 학습 자바와 파이썬의 차이점으로 인한 추가 학습 내용을 정리하려고 함. 우선 2차원 배열 생성시엔 int[][] mtx = new int[n][] 로 단순히 int로 2차원 배열 생성한 다음 첫 배열에 길이를 작성해주면 됨 다음으로 공백이 없는 문자를 배열로 받을 경우엔 br.readline().toCh..

알고리즘 2023.12.20

[백준, 자바, 1021번] 회전하는 큐

풀이 풀면 풀 수록 자바보단 파이썬이 너무 편하다는 걸 느끼게 된다... 우선 자바에서 deque를 사용할 때엔 Deque를 사용하면서 안의 배열은 자유롭게 사용하지만 보통은 ArrayDeque나 LinkedList를 사용한다고 하는 것 같다. 그리고 다른 것은 뭐 그냥 간단한 것이기에 해결이 쉽지만 뭔가 애를 먹었던 부분이 else의 if 문에서 인덱스와 dq.size()/2 부분에서 정수 나누기 정수의 경우엔 정수로 되는 부분으로 한참 고생을 했다. 그리고 파이썬에서는 간단하게 인덱스를 찾을 수 있었지만 잘 몰라서 그런지 할 수 없다는 것을 알게 되어 따로 메서드를 정의하여 해결 마지막으로 문제에서 2번,3번 연산의 최솟값을 출력하라고 해서 둘 중 작은 값으로 출력해야하는 줄 알고도 조금 ... ㅎ ..

알고리즘 2023.12.19