Algorithm 썸네일형 리스트형 BOJ_1525_퍼즐 백준 1525 퍼즐 문제는 큐를 이용한 BFS와 HashMap을 사용한 문제이다. 보통 큐를 이용한 BFS를 풀기 위해선 다음 조건이 따른다. 1. 노드간 이어지는 간선의 가중치는 모두 다 1이다.2. 최소한의 경로로 탐색하려고 한다. 이 두 조건이 붙고 문제 풀이는 다음과 같다. 1. 노드 간에 이동을 하였는지 알아보기 위해서 boolean 배열을 사용한다. 예를 들어, 1번 노드에서 2번 노드로 이동할 때 이미 2번 노드로 이동하는 간선을 사용했다면, boolean[] visit = new boolean[10001]; visit[1] = true; ( 1번 노드에서 2번 노드로 이동하는 1번 간선을 이미 사용했다. ) 이런 식으로 이미 이동했으니 이동할 수 없다는 boolean 배열로 만들어준다. 2.. 더보기 순열을 활용한 차이 최대값 구하기_BOJ_10819 사실 이 문제를 이해하기 위해서 좀 오래걸렸다. 주어진 배열을 먼저 오름차순으로 정렬한 뒤 다음 순열 공식을 이용해서 이 중 반복문을 거치고 이를 통해 문제에서 요구하는 최대 차의 값을 구하도록 만드는 것이다. 코드 부터 확인해보자 public static void main(String[] args) {// TODO Auto-generated method stubsc = new Scanner(System.in); int N = sc.nextInt();int[] A = new int[N]; for (int i = 0; i < N; i++)A[i] = sc.nextInt(); // 배열 안에 넣기 Arrays.sort(A); // 오름 차순 정리 int max = 0;do {int tmp = calculat.. 더보기 BOJ_1476_날짜계산 문의 package algorithm; import java.util.Scanner; public class 날짜계산_1476 { private static Scanner scan; public static void main(String[] args) {// TODO Auto-generated method stub/* * E , M , S --> 날짜 1 더보기 비트마스크 정리 비트 마스크란? 비트 연산을 통해서 부분 집합을 표현하는 용도로 사용 두 수 A,B를 비트 연산할 경우에는 가장 뒤의 자리부터 하나씩 연산을 수행하면 됩니다.예를 들어 A= 27 , B=83일 경우,A = 11011(2) B = 1010011(2) 여기서 A & B를 계산하면 뒤의 자리부터 맞춰서 계산해야 하므로 0011011(2) & 1010011(2)ㅡㅡㅡㅡㅡㅡㅡㅡ 이렇게 연산 되어서 동일하게 1이 있으면 1로 반환되고 0,1 로 비교될 경우는 0으로 반환된다. 그래서 값은 19가 나온다. 이렇게 뒤의 자리부터 맞춰서 계산해야 한다. 비트 연산 Shfit Left ( > B ( A를 오른쪽으로 B 비트만큼 민다. ) 1 >> 0 : 1 1 >> 1 : 0 10 >> 1 : 1010(2) --> 010.. 더보기 회문 작성 알고리즘 회문 작성 알고리즘이란? 한 문장을 앞에서부터 읽은 것이나, 뒤에서부터 읽은 것이나 같은 문장 예시 : abcdedcba 문제 : 문자열로 들어오는 str 뒤에 0 이상의 값을 추가하여 회문을 생성하고자 한다.생성할 수 있는 가장 짧은 회문의 길이를 구하시오. 아이디어 짜기 1. 구하는 값은 str의 총 길이가 될 것이며, str 뒤에 0 이상의 값을 추가하여 회문을 만드는 것이기 때문에리턴되는 회문의 최단 길이는 str의 길이가 될 것입니다.따라서 구하려는 값의 초기 값은 str의 길이로 잡고 시작하면 됩니다. 2. 비교할 것은 문자열의 처음 위치 값과 그 다음 위치 값을 비교합니다. 3. 다른 값이 나올 경우 반복문을 끝내고 회문이 아니기 떄문에 str 문자열 뒤에 값을 추가합니다. 코드는 다음과 같.. 더보기 전체 탐색 알고리즘 소개 전체 탐색 알고리즘이란? 모든 패턴을 조사하거나 그러한 것을 필요로 하는 문제 예시 친구가 i 명 있습니다. 각 i번째의 친구는 first[i], second[i] 이렇게 두 가지 흥미로운 주제를 가지고 있습니다.각 친구들은 흥미로운 주제가 같아야만 이야기를 합니다.친구들이 가장 많이 즐기기 위해서는 어떻게 해야 하는가? 이럴 경우 방법은 두 가지가 있습니다.첫 번째로는 모든 i번째의 친구들의 취미를 하나씩 비교해서 패턴을 찾고 최대로 흥미를 가지게 만드는 것입니다. int ans = 0;for(int i=0;i 취미가 가장 많이 겹치는 것임ans = Math.max(ans,f_cnt);ans = Math.max(ans,s_cnt);} return ans; 이 중 for문을 사용하지 않고 연관배열을 사용.. 더보기 시뮬레이션 문제 시뮬레이션 문제란? 알고리즘을 풀 때 모든 과정이 제시되어 그 과정을 거쳐 나온 결과를 추론하는 문제입니다.시뮬레이션은 설명해 준 대로 쭉 이행하면 됩니다. 코드에서 간단하게 설명드리도록 하겠습니다. 문제( i 번째 기준 )병의 용량 : capacities[i];주스의 양 : bottles[i];주스를 붓는 양 : toId[i];주스를 붓고 남은 양 : fromId[i]; 문제는 빈 병에다가 주스를 재분배해서 담으려하는데 0부터 M-1번째까지 M회 조작합니다.i 번째 조작에 있어서는 fromId[i]부터 toId[i]에 주스를 담는 것을 의미합니다.병 fromId[i]가 비어 있거나 병 toId[i]가 꽉 차 있다면 더이상 주스를 분배할 수 없습니다. 이러한 문제는 시키는 대로 순서대로 하면 되는데, 우.. 더보기 Collection Collection 개념 같은 타입의 참조 값을 저장하기 위한 자바 라이브러리 - Set : 데이터 값의 중복을 허용하지 않고 순서도 가지지 않는다.- List : 중복을 허용하고 순서를 가진다. - Map : Key와 Value의 형태로 저장한다. Set의 종류 Set에는 크게 HashSet과 SortedSet이 있습니다. HashSet은 Set 인터페이스의 특성을 상속받기 때문에 데이터 값만을 받고 중복을 허용하지 않으며 순서도 중요하게 생각하지 않습니다. SortedSet은 마찬가지로 Set인터페이스의 특성을 상속 받기 때문에 데이터 값만을 받고 중복을 허용하지 않지만, 정렬된 Set이기 때문에 순서를 중요하게 생각합니다. 또한 Set 중에서도 Linked ~~ 로 되어 있는 Set은 연결리스트 구.. 더보기 이전 1 2 3 4 5 6 다음