인기 글
목록
[BOJ] 백준 23559 밥 (JAVA)
- Baekjoon2024.06.21 20:47[BOJ] 백준 23559 밥 (JAVA)

📑 문제 🌱 아이디어DP 문제처럼 생긴 그리디 문제.... 결국 알고리즘 분류 보고 풀었다.. 이 문제에서 생각해야 하는 부분은 2가지 정도 있다. 1. A메뉴, B메뉴를 어떤 기준으로 선택할 것 인지?2. 5000원 메뉴인 A메뉴를 돈이 부족해 선택을 하지 못할 때. [1번 경우]다른 그리디 문제는 정렬 시 데이터에서 하나의 기준을 잡아 정렬하는 경우가 많다.위 문제는 정렬의 기준을 (A메뉴 - B메뉴)의 차이를 기준으로 내림차순으로 정렬한다 ex) 1000 999 보다 10 1 이 우선순위가 되어야 한다. [2번 경우]1번 경우에서 5천 원 메뉴를 선택하다 보면 나머지 날은 밥을 먹지 못하는 경우가 생길 수도 있다.위 경우를 방지하기 위해 M - 5000 >= 남은 요소 * 1000으로 위 상황을..

[BOJ] 백준 19577 수학은 재밌어 (JAVA)
- Baekjoon2024.05.26 19:24[BOJ] 백준 19577 수학은 재밌어 (JAVA)

📑 문제🌱 아이디어Xφ(X) = N , X의 범위는 N의 약수이다. 풀기 전 가장 크게 고민했던 점은 한 가지이다. X를 어떻게 찾아야 하는가이다.당연하게도 X는 N이하 일 것이다. 하지만 N이 1,000,000,000 경우 탐색범위가 커서, 시간초과가 날것이다 첫 번째 시도는 정수 'X'를 이분탐색으로 찾는 것이다. 물론 X마다 오일러의 피 수가 규칙적이지 않아서, 실패했다. 두 번째는 시도는 A * B = N이라면 -> 결국 A, B는 N의 약수이다. 라는 아이디어로 시작했다.당연하게도 두 수를 곱해서 N 이 되려면 두 수는 N의 약수일 것이다.  약수를 구할 때 제곱근까지만 탐색하여. O(logn)만큼 최적화하고X의 탐색범위를 N의 약수로 획기적으로 줄이고 오일러의 피함수 알고리즘으로 계산하여조..

[BOJ] 백준 16496 큰 수 만들기 (JAVA)
- Baekjoon2024.05.23 16:55[BOJ] 백준 16496 큰 수 만들기 (JAVA)

📑 문제🌱 아이디어숫자 정렬이 아닌 사전순(문자열) 정렬을 사용하자 "큰 수"의 기준이 아닌 사전순 정렬을 사용한다. 9, 30 두 숫자가 있다. 두 수를 조합하여 만들 수 있는 가장 큰 수는930이다. 즉 문자열 정렬을 통해 가장 뒤서는 순(30, 9)부터 숫자를 합치며 풀면 된다. 하지만 하나의 반례가 있다. 3,30 두 숫자가 있다. 두 수를 조합하여 만들 수 있는 가장 큰 수는 330이다.하지만 문자열 정렬 시 가장 뒤서는 번호가 30이 된다 (3,30) 위처럼 출력 시 303이라는 숫자가 만들어진다. 이미 정렬된 문자열에서 앞의 숫자 '3', '3'0 같을 경우 330, 303이 큰지 판단하고, 결괏값에 따라 문자열을 서로 변경해 주는 형식으로 풀면 된다. 입력 값으로 1,000,000,00..

[BOJ] 백준 17267 상남자 (JAVA)
- Baekjoon2024.05.14 13:51[BOJ] 백준 17267 상남자 (JAVA)

📑 문제  🌱 아이디어BFS 응용문제, 다른 문제들과 비슷하게 상, 하, 좌, 우를 이동할 수 있지만 좌, 우는 이동 횟수가 제한된다.그렇다면 총 이동할 수 있는 칸은 몇 칸인가? 를 물어보는 문제이다. 먼저 현재 좌표, 좌, 우 남은 이동 횟수를 담는 객체를 만들고 방문처리 및 0-1 BFS를 돌리면 된다고 생각했다.하지만 91%쯤 실패한다... 예상컨대 큰 틀에서 구현자체는 틀리지 않았지만, 히든케이스를 만족시키지 못할 만큼디테일하게 구현하지 못했던 것 같다 BFS 응용문제에선 대부분 방문처리에서 히든테스트케이스가 나온다. 기본적인 2차원 boolean 배열의 방문처리에는 한 가지 단점이 있다.- 먼저 도착한 노드가 최적값인지, 아닌지를 판단하지 못하고 무조건 먼저 도착한 노드만 통과시킨다. 하나..

자바 옵셔널(Optional)클래스의 올바른 사용방법
- Java2024.05.09 18:24자바 옵셔널(Optional)클래스의 올바른 사용방법

🌱 옵셔널(Optional)이란? + 왜 사용해야 하는지? 자바 8에 추가된 기능이며, 결괏값이 없음(null)을 더 안전하고 명확히 전달하기 위해 등장했다.자바 8 이전까진 null로 표현했지만 알다시피 null은 시스템에 오류를 발생시킬 가능성이 매우 높다즉 시스템을 NPE(NullPointerException)로부터 안전하게 보호하기 위한 기능을 제공하는 래퍼(Wrapper) 클래스이다. Null safety를 고려하는 개발을 통해 에러를 방지하고 시스템의 안정성을 보장하기 위해 옵셔널을 사용한다.  🚨  사용 시 주의사항그렇다면 모든 변수, 반환값에 옵셔널로 래핑 해서 관리하면 되는 것 아닌가? 앞서 이야기했던 것처럼 옵셔널은 래퍼(Wrapper) 클래스이다. 반환값 등을 감싸고 (Wrappi..

[BOJ] 백준 13334 철로 (JAVA)
- Baekjoon2024.05.09 02:35[BOJ] 백준 13334 철로 (JAVA)

📑 문제🌱 아이디어스위핑 유형의 문제, 일단 무엇을 기준으로 정렬할지 생각해 보자 위 문제에 핵심은 좌표의 범위 L이 주어질 때  end - start 이 만족해야 한다, 즉 구간마다 L범위에 해당하는선분의 개수를 세야 한다. 좌표 구간마다 선분이 해당하는지 판단하고, 범위체크까지 한다면 자칫 O(N^2) 시간복잡도를 가지게 구현할 수 있다.하지만 N의 범위가 100,000까지 이며 O(N) 이하로 구현해야 한다. 먼저 데이터를 정렬하는 과정이 필요하다. y축을 기준으로 정렬하고 한쪽 방향으로 쭉 스캔하면서 계산을 하면 된다즉 한쪽 -> 반대쪽으로 쭉 스캔을 하는 스위핑 방식으로 구현하면 O(N)의 시간복잡도로 빠르게 구현 가능하다.   정렬 후 가장 아래 (10, 20)부터 last에 x를 넣고 계..

BOJ
[BOJ] 백준 11724 연결 요소의 개수 (JAVA)
[BOJ] 백준 11724 연결 요소의 개수 (JAVA)
- Baekjoon
2023.12.14 22:12
📑 문제 본문에서 "방향 없는 그래프가 주어졌을 때" 라는 말은 곧 양방향이다!즉 A -> B , B -> A 가 성립해야 한다. "연결 요소"에 대해 설명하기 위해 테스트 케이스를 두 가지를 가져와 봤다.1. 본문 예제 입력 1 위 사진은 본문에서 입력된 정점과 간선들의 그래프이다.왼쪽 집합 (1,2,5) 와 오른쪽 집합 (3,4,6)은 연결할 수 있는 간선이 없다 즉 "연결 요소의 개수는" 2 가 되는 것이다! 2. TestCase : 4 0이 경우는 노드는 4개이고 간선은 0이다 그렇다면 연결 요소의 개수는 몇일까?답은 4 이다. 간선이 없는 노드는 하나의 연결요소이다. 이점만 생각하고 구현한다면 쉽게 풀 수 있을 것이다. 🌱 코드 및 풀이ArrayList를 이용하여 인접리스트를 만들고 양방향임..
[BOJ] 백준 14502 연구소 (JAVA)
[BOJ] 백준 14502 연구소 (JAVA)
- Baekjoon
2023.12.13 23:48
📑 문제  🌱 아이디어지도의 크기 (3 ≤ N, M ≤ 8), 입력되는 값이 적다! = 완탐 가능하다.지도의 최대 크기가 8*8 = 64 이다. 완전탐색 으로 풀 수 있다는 뜻이다,즉 지도에 벽을 3개를 모든 경우만큼 다 세운 후 가장 많은 안전구역의 크기를 구하면 된다!DFS, BFS 둘 다 사용해서 풀 수 있다DFS = 벽 세우기, BFS = 바이러스 퍼트리기 이렇게 역할을 나눠서 구현할 수 있다. 🌱 코드 및 풀이 엄청 길다;;; 하지만 각 기능을 함수로 나눠서 설명을 달아 놨으니 천천히 보신다면 이해하기엔 어려움이 없을 것이다아마도 이해가 안 된다면 댓글 달아주시면 최대한 설명해 보겠습니다.그래도 간단히 설명을 하자면 dfs() -> 지도에 벽을 3개를 세운다bfs() -> 바이러스를 전염시..
[BOJ] 백준 25206 너의 평점은 (JAVA)
[BOJ] 백준 25206 너의 평점은 (JAVA)
- Baekjoon
2023.12.11 19:18
📑 문제🌱 아이디어평균학점을 구하는 공식만 안다면 전혀 어렵지 않은 문제이다. 하지만 위 지문을  잘 못 읽어서 "P", " F" 둘 다 제외하는 것으로 이해하고 말아 버렸다. 다음엔 또박또박 읽자. 요약하면 "F" 점수까지 계산 해줘야 한다.평균학점 = (과목평점*과목이수학점 +....)/총 이수학점 = 전공평점평균학점을 구하는 공식과 HashMap을 이용할 안다면 전혀 어렵지 않은 문제이다(성능도 높힐 수 있다.)  🌱 코드 및 풀이HashMap에 등급별 과목점수를 모두 저장한다. grade [i]. equals("P") key값이 "P"인 경우는 제외하고 file.get(grade [i])* num [i]에서 과목 평점을 계산합니다. 만약 sum == 0이라면 모든 과목이 "P" 등급이기 때문..
[BOJ] 백준 1052 물병 (JAVA)
[BOJ] 백준 1052 물병 (JAVA)
- Baekjoon
2023.12.10 21:03
📑 문제🌱 아이디어N = 3, K = 1이라면 물병을 K개 이하로 만들어야 할 때 2L 물병 = 1개, 1L 물병 = 1개로 합 칠 수 있다. 하지만 아직 물병이 총 2개 이기 때문에 K개 이하로 만들기 위해 1L 물병 1개를 사서 2L 물병 = 2개 -> 4L 물병 = 1개로 만들어 조건 성립 시킨다.결국 같은 물량을 두 개씩 합친다 그렇다면 1L -> 2L -> 4L -> 8L로 물의 양이 정해진다이러한 규칙은 곧 이진수와 같다 그렇다면 비트마스킹으로 풀 수 있을 것이다! N = 3, K = 1 특히 N = 3을 이진수로 나타내면 11 이다. '1'의 개수가 K개 이하 여야 하기 때문에 N = 4를 이진수로 나타내면 100 이다 그러므로 4 - 3 = 1 즉 1개만 물병을 추가하면 된다. 🌱 코..
SWEA
[SWEA-1206] : [S/W 문제해결 기본] 1일차 - View (JAVA)
[SWEA-1206] : [S/W 문제해결 기본] 1일차 - View (JAVA)
- SWEA
2023.10.29 22:20
D3 [S/W 문제해결 기본] - View를 JAVA로 풀어보자! SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com Solution import java.util.*; import java.io.*; import java.lang.*; public class Solution { public static void algorithm(int[] arr1) { // 구현 int cnt =0; for(int i=2; i < arr1.length-2; i++ ) { // 처음2칸 마지막2칸 제외 //현재 자리기준 양 옆 2칸 check에 담기 int[] check = {arr1[i-2],arr1[i-1],arr1[i+1],..
image