본문 바로가기

분류 전체보기242

[프로그래머스] 스티커 모으기(2) - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/12971 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이원형으로 된 스티커가 있고, 어느 한 칸을 떼면 양 옆의 칸에 있는 스티커는 뗄 수 없다. 이때, 스티커를 떼어 얻을 수 있는 최댓값을 구하는 문제이다. 배열의 길이가 100,000이기 때문에 dp로 푸는 문제였다. 점화식은 다음과 같다.dp[i] = Math.max(dp[i - 1], dp[i - 2] + sticker[i]);바로 이전 스티커를 떼었으면 현재 칸을 뗄 수 없고, 현재칸을 떼려면.. 2024. 5. 19.
[프로그래머스] 징검다리 건너기 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이[2, 4, 5, 3, 2, 1, 4, 2, 5, 1]위과 같은 배열으로 징검다리들의 숫자가 입력으로 들어온다. 디딤돌을 밟을때마다 숫자가 1씩 줄어들고, 0인 돌이 있다면 안뛰고 건너뛸 수 있다. 하지만, 입력으로 k가 주어지는데 한번에 k개의 돌만 건너뛸 수 있다. 예를 들어, `[5, 3, 2, 1, 4]` 이러한 배치를 하고있다면 3명이 돌을 건너간 후의 상태는 `[2, 0, 0, 0, 1.. 2024. 5. 19.
[백준] 2437: 저울 - JAVA https://www.acmicpc.net/problem/2437 풀이저울추들을 이용하여 무게를 측정하는데 측정할 수 없는 최소값을 구하는 문제이다. 방법이 안떠올라서 정답을 찾아봤다... 먼저 추의 무게들을 정렬하여 작은 것부터 꺼낸다. 올리려는 저울추의 무게가 지금까지 올린 무게의 합 + 1 보다 크다면 무게의합+1이 최소값이 된다. 올린 무게의 합을 sum이라고하면 이는 1~sum까지 무게를 측정할 수 있다는 말이다. sum = 5인 상태에서 다음 저울추가 6이라면 sum + 6까지 무게를 잴수있다. 하지만 다음 저울추의 무게가 7이라면 sum + 1인 6이 측정할 수 없는 최소값이 된다. 메모리: 14384KB시간: 136ms언어: Java 11import java.io.*;import java... 2024. 5. 19.
[백준] 20207: 달력 - JAVA https://www.acmicpc.net/problem/20207 풀이일정들의 시작, 종료 날짜가 주어지고, 달력에 배치해야 한다. 달력에 배치할 때 주의해야 할 규칙은 다음과 같다. - 시작일이 가장 앞선 일정부터 차례대로 채워진다. - 시작일이 같을 경우 일정의 기간이 긴 것이 먼저 채워진다. - 일정은 가능한 최상단에 배치된다. 365일만큼 배열을 만들고, 일정이 있는 구간에 `+1`하여 누적합했다. 빈칸이 있으면 최상단에 배치되기때문에 누적합하여 높이와 길이를 정할 수 있기 때문이다. 일정이 없는 날짜가 나오면 `이전까지 누적했던 길이 * 높이`를 답에 더해주었다.  메모리: 14480KB시간: 136ms언어: Java 11import java.io.*;import java.util.*;publ.. 2024. 5. 19.
[프로그래머스] 주사위 고르기 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/258709 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이n개의 주사위를 2명이 나눠가진다. 주사위에 쓰인 수의 구성은 모두 다르다. 나눠 가진 주사위들의 합을 구해 점수가 큰 쪽이 승리하는데, A가 승리할 확률이 높도록 주사위를 나눠야 하는 문제이다. 먼저 주사위를 어떻게 나눌지 완탐했다. getDice()메소드를 만들어 비트마스킹을 이용해 어떤 주사위를 A가 선택할지 정해주었다. 선택이 완료되면 calculateWinRate()메소드를 통해 승률을.. 2024. 5. 19.
[트러블슈팅] 젠킨스 디스크 용량 부족 내용프로젝트를 빌드하려고했는데 젠킨스의 built-in-node가 용량 부족 문제로 실행이 되지 않는 상황이 발생했다.  해결ec2 볼륨을 수정해주는 것으로 해결했다. 기존에는 8GB 볼륨으로 되어있었는데 20GB로 늘려주었다. 과정은 다음과 같다. 1. ec2 콘솔에 접속 -> 인스턴스 선택. 2. 세부정보의 스토리지탭으로 이동. 3. 블록 디바이스에서 볼륨ID선택하여 진입. 4. 수정눌러 수정 페이지 진입 후 크기 설정. ec2에서 볼륨은 늘렸지만 ssh 터미널에서 다시 설정해주어야한다.# 하드디스크 용량 확인$ df -hT# 파티션 볼륨 확인$ lsblk# 파티션 크기 조정$ sudo growpart /dev/nvme0n1 1# ex4 파일 시스템 확장$ sudo resize2fs /dev/nvme.. 2024. 5. 19.
[백준] 1593: 문자 해독 - JAVA https://www.acmicpc.net/problem/1593 풀이문자열 W와 S가 주어진다. S를 W의 길이만큼 잘라 그 안의 문자 순서를 바꿨을 때 W로 만들 수 있는 개수를 세는 문제이다. map을 두개 선언하여 하나에는 W에 들어있는 문자와 개수를 담았다. 또 다른 하나는 W의 길이만큼 S를 잘라 개수를 담았다. 슬라이딩 윈도우를 이용해 S를 탐색하면서 map의 개수를 조정하여 map 두 개가 같은지 비교하여 같을 경우 답을 하나 증가시켰다.  메모리: 149420KB시간: 900ms언어: Java 11import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOE.. 2024. 5. 19.
[백준] 16169: 수행 시간 - JAVA https://www.acmicpc.net/problem/16169 풀이컴퓨터마다 계급이 있어서 i번 컴퓨터가 동작하기 위해서는 i-1번 컴퓨터들이 먼저 동작을 해야한다. 위상정렬을 이용해 구현했다. 컴퓨터들의 정보를 저장하고, 계급의 오름차순으로 i번과 i+1을 연결시키는 연결리스트로 저장했다. 위상정렬을 위한 배열도 저장하여 이 값이 0인 것부터 큐에 넣어 처리해주었다.   메모리: 14148KB시간: 128ms언어: Java 11import java.io.*;import java.util.*;public class Main { static class Computer { int idx; int rank; int speed; public Compu.. 2024. 5. 19.
[백준] 1039: 교환 - JAVA https://www.acmicpc.net/problem/1039 풀이정수 N의 i번 위치와 j번 위치의 숫자를 바꿀 수 있다. 이 행위를 K번 반복할 때 최댓값을 구해야 한다. 위치를 바꿀 때 바꾼 수가 0으로 시작하면 안된다. n번 수행했을 때 나온 수를 방문처리 하기 위해 이차원 배열로 방문처리했다. bfs탐색을 통해 숫자와 바꾼 횟수를 저장해가면 진행했다.  메모리: 54616KB시간: 244ms언어: Java 11import java.io.*;import java.util.*;public class Main { static final int MAX = 1_000_001; static int answer; static class Node { int num; .. 2024. 5. 18.
[백준] 2150: Strongly Connected Component - JAVA https://www.acmicpc.net/problem/2150 풀이SCC는 정점들의 부분집합이며, 그 부분집합에 들어있는 서로 다른 두 정점 u, v에 대해 u에서 v로 가는 경로, v에서 u로 가는 경로가 모두 존재하는 경우를 말한다. 간선의 정보가 주어질 때, SCC의 개수와 그 안의 정점들을 출력해야 한다. SCC를 구하는 방법으로 코사라주 알고리즘과 타잔 알고리즘이 있다. - 코사라주 알고리즘   방향 그래프, 역방향 그래프, 스택을 사용하여 SCC를 구한다. 방향 그래프와 역방향 그래프가 동일한 SCC를 구성한다는 것을 이용한다.   1. 방향 그래프의 모든 정점에 대해 dfs를 수행하여 끝나는 순서대로 스택에 삽입한다.   2. 아직 방문하지 않은 정점이 있는 경우 다시 DFS를 수행한다... 2024. 5. 18.