본문 바로가기

전체 글301

백준 [자바 java] 1522 : 문자열 교환 https://www.acmicpc.net/problem/1522 이 문제는 최소한의 횟수로 노드를 교환하여 같은 문자열끼리 나열되도록 하는 문제이다 처음엔 bfs로 풀어야하나(그놈의 bfs...)했는데 아무리 생각해도 너무 오래걸린다고 생각했다.알고보니까 슬라이딩윈도우라는 알고리즘으로 풀어야한다고 한다.슬라이딩 윈도우는 네트워크 할 때 봤다!탐색해야하는 배열의 범위가 주어진다면 처음부터 끝까지 한칸씩 이동하면서 가능한 배열의 가짓수를 모두 탐색하는 것이다. 여기서는 모든 a가 일렬로 나열되어야하므로, a의 갯수만큼 탐색을 해주었다. aabbbaba 이런 배열이 있으면 여기서는 a가 4개이다.(aabb)baba 이 경우는, b가 윈도우 내 2개이므로, 2번 교환을 해야한다.a(abbb)aba 이 경우는 .. 2025. 6. 29.
백준 [자바 java] 2531 : 회전초밥 https://www.acmicpc.net/problem/2531 이 문제는 위와 같은 회전초밥집의 규칙이 있을 때 사용자가 먹을 수 있는 초밥의 최대 가짓수를 구하는 문제이다.처음에는 해시셋을 사용했는데, 생각해보니 특정 숫자가 2개 이상인 경우, 셋에서 아예 빼버리면 반례가 발생하게된다.따라서 해시맵을 통해 각 숫자별로, 등장 횟수를 저장하는 방식으로 구현했다. 풀이HashMap h = new HashMap();for(int i = 0;i일단 0부터 K-1까지 해시맵에 넣었다(초기값)그 다음 서비스로 주는 초밥 번호까지 맵에 넣은 후 for(int i = 1;i 1부터 n-1까지 순회한다.i-1(현재 집합에서 제외되는 부분)은 맵에서 제거하고, (i+k-1%n), (새로 집합에 들어가는 부분)은 해.. 2025. 6. 29.
백준 [자바 java] 2138 : 전구와 스위치 https://www.acmicpc.net/problem/2138처음에는 bfs로 풀어야하나 했는데 그렇게 하니까 너무 경우의 수가 많았다.알고보니 그리디를 사용하는 문제였다.앞에서부터 천천히 조건에 부합하기 위한 선택을 해나가면 된다. 그런데 0번 전구 스위치를 누르냐 마냐를 미리 결정하지 않으면 많이 복잡해진다.따라서 나는 0번 스위치를 누르는 경우, 누르지 않는 경우를 나눠서 진행했다 풀이char[] ori = br.readLine().toCharArray();char[] com = br.readLine().toCharArray();char[] nowOri = Arrays.copyOf(ori,n);먼저 원래의 문자열과 바뀐 후의 문자열을 입력받는다.처음에는 nowOri = ori 이런식으로 카피를 .. 2025. 6. 29.
백준 [자바 java] 12919 : A와 B 2 https://www.acmicpc.net/problem/12919이 문제는 보자마자 bfs를 이용해서 풀어야겠다! 라고 생각했다.그래서 생각한대로 풀었는데 시간초과가 났다.. 알고보니까 나는 S를 T로 만들어가는 과정에서 BFS를 사용했는데, T를 S로 바꾸는 과정에서 BFS를 사용해야 효율적이다.왜냐하면 S를 T로 만들어가는 과정은 모든 경우의 수를 다 탐색하는데 , T를 S로 바꾸는 과정은 A가 뒤에 있을 때에는 A를 빼고, B가 앞에 있을때에는 B를 빼고 순서를 뒤바꾸는 과정만 거쳐도 정답을 도출할 수 있다. 앞으로 이런 문제가 나오면 탑다운 방식으로 풀것인지, 바텀업 방식으로 풀것인지 생각을 해야할 것 같다. import java.io.*;import java.util.*;import java... 2025. 6. 28.
백준 [자바 java] 20920: 영단어 암기는 괴로워 https://www.acmicpc.net/problem/20920단어가 주어지고, 각 조건을 만족하는 순서대로 출력을 해야한다.처음엔 실버 3문제라 쉽게 풀릴거라고 생각했는데 생각보다 쉽지 않았다.이 문제는 java의 유용한 라이브러리를 많이 써야하는 문제였다. 해설for(int i =0;i=m) map.put(arr[i],map.getOrDefault(arr[i],0)+1);}단어를 입력받을 때, 단어가 조건의 길이를 넘기면 해시맵에 해당 단어를 넣는다.이때 value값은 해당 단어가 나온 횟수이다. map에 이미 단어가 존재한다면 그 value를 꺼내서 1을 더해 다시 넣어주고, 아니면 1을 넣어준다나는 보통 이럴 때 contains 함수를 사용했는데 getOrDefault 함수를 쓰니 더 편리하다.. 2025. 6. 28.
[Docker] 도커란 무엇일까 나는 프로젝트를 하면서 aws에 프로젝트를 배포하는 역할을 많이 했었는데, 거의 다 docker를 사용했다.앞으로도 애용할 예정이기에 더 자세히 알아보기로 했다 도커가 필요한 이유컴퓨터마다 각각의 버전과 os가 다르다. -> 단순히 내 컴퓨터 내의 코드를 전송한다고 잘 작동한다는 보장이 전혀 없다. 우리가 배포를 하면 작성한 코드는 서버용 컴퓨터에서 돌아가게 된다.서버용 컴퓨터와 개발용 컴퓨터는 버전 등의 요소가 다를수밖에 없다. 만약 도커가 없다면, 다음과 같이 두가지의 프로그램이 한 서버에서 돌아갈 때 두 프로그램이 쓰는 특정 툴의 버전이 다르다면 에러가 날 수 있다.그럼 이런식으로 각각 만들면 되지 않나?라고 생각할 수 있지만 이렇게 하면 각 부분이 컴퓨터자원을 잘라서 가져가야하고, 또 겹치는 os.. 2025. 6. 26.