본문 바로가기

분류 전체보기

(382)
백준(BOJ) 11000: 강의실 배정 문제를 다시 풀때마다 새로운 회의를 이미 강의실을 차지하고 있는 모든 회의들의 마감시간과 비교해야하는 것 아니냐는 게으른 사고에 빠지곤 한다!!! 아래는 이에 대한 답이다! 모든 것과 비교해야 하는 경우 이러한 번거로움을 없애줄 수 있는 것이 우선순위 큐이다. 왜 그런가? 사실은 모든 것과 비교할 필요가 없고 그 중 가장 크거나 혹은 가장 작은 것과의 비교만 이루어 지면 되기때문이다. 배열에 시작시간이 가장 이른 순서로 배열을 정렬하고 그 배열의 첫번째 인자의 마감시간을 우선순위 큐에 넣는다. 그리고 두번째인자부터 그 시작시간을 우선순위큐의 인자와 비교만 하면 되는 것이다. 만약 우선순위 큐의 값이 더 작다면 pop하고 2번째 회의의 마감시간을 큐에 넣으면 되고 만약 우선순위 큐의 값이 더 크다면 pop..
School algo08 탐욕적(Greedy) 알고리즘(&자바복수비교문법) 복습. 탐욕적 알고리즘이란? 매 반복시 최선의 것을 선택하는 알고리즘 A. 마감시간이 있는 최적 스케줄링 문제 마감시간 있는 최적 스케줄 문제는 일에 대한 마감시간과 그에따른 이익이 함께 주워 진다. 그리고 구하는 것은 이익이 최대가 되는 스케줄이다. 우선 문제에 들어가기 앞서 참고하면 좋은 영상과 그 영상으로부터의 코드를 소개한다. https://www.youtube.com/watch?v=x9iDSJHV8F8 크루스칼에서는 feasible 과정이 있지만 같은 MST를 구하는 프림알고리즘에서는 feasible과정이 없다. 그 이유는 프림 알고리즘은 정점을 선택하는 것이기 때문이다. 프림 알고리즘에서 for문 사용으로 매번 다른 정점을 선택하는 코드 구조이다. 그렇다면 마감시간있는 프로젝트에서는 왜 fea..
백준(BOJ) 14916: 거스름돈 https://www.acmicpc.net/problem/14916 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Testing2{ public static int solution(int value, int answer){ if(value
백준(BOJ) 1343 : 폴리오미노 https://www.acmicpc.net/problem/1343 /* 처음에는 뭔가 재귀적 설계를 생각하면서 복잡한 해결책을 생각했었다(이전에 풀었던 14916거스름돈 문제풀다가 바로 이문제 풀어서 그랬던것같다). 하지만 이 문제는 매우 단순한 문제이다. 왜냐하면 답에 해당하는 문자열을 ('AAAA'혹은 'BB'을 이용해서) 만들어가기만 하면 되는것이다. 즉 재귀적사고로 재귀트리를 내려갔다 올라갔다 하지 않고 그냥 한큐에 'AAAA'가 안되면 'BB'를 넣고 'BB'가 안되면 '.'을 넣으면 되기 때문이다. 즉 답에 해당하는 문자열을 순차적으로(빠꾸할 필요없이)완성해 나가면 되기 때문에 쉬운 문제다. */ import java.io.BufferedReader; import java.io.IOExcept..
School algo02 전수조사(답만 깔끔하게 제시한 버전) BestSum에서 특히 아래 글에서 제시한 복잡한 방법을 개선하고자 변경하였다. CanSum import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main{ public static boolean canSum(int target, int[]arr){ if(target==0) return true; if(target
School algo02 전수조사 재귀를 이용한 전수조사문제는 거시적 관점에서는 대부분 재귀트리를 내리락 오르락 하면서 답을 찾아나간다. 다만 세부적으로보면 올라가면서 답을 찾는 경우가 있고 완전히 내려와서 찾는 경우가 있다(물론 내려가면서 찾을수도 있지만 이 경우는 내가 경험해 본 바에 의하면 올라가면서 찾는 경우로 바꿀수 있고 그렇게 바꾸는게 더 코드가 좋다). 이는 어디까지나 세부적으로 보았을때 그렇다는 말이지 거시적으로는 대부분 내리락 오르락 하면서 답을 낸다. import java.util.Scanner; public class Main { // int[블록을 놓는 모양][모양에 따른 블록들의 상대좌표][상대 좌표] // 가장 왼쪽 위 블록을 기준으로 상대좌표를 산정한다. // (y좌표,x좌표) private static int..
Git 브랜치란 무엇인가 출처: https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80#ch03-git-branching 이전에 몇시간 고민한 질의를 시작으로 글을 시작하려한다. 선생님들 깃에 관해 하나만 물어볼께요. 1)remote에서 하나의 저장소에 A라는 하나의 브랜치만 있었습니다. 그리고 같은 저장소에 B 라는 브랜치를 하나더 추가하고 그 브랜치에는 폴더를 하나 추가해 주었습니다. 이것을 로컬에서 A브랜치도 pull하고 B브랜치도 pull하였습니다. 그랬더니 로컬저장소에는 그 B에만추가된 폴더가 그대로 남아있습니다. 즉, 로컬 저장소는..
2.2 Git의 기초 - 수정하고 저장소에 저장하기 출처: https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0 용어정리 스냅샷: 사진을 찍듯이 특정 시간(시점)에 데이터 저장 장치(스토리지)의 파일 시스템을 포착해 별도의 파일이나 이미지로 저장, 보관하는 기술을 말합니다. 그래서 스냅샷 기능을 이용하여 데이터를 저장하면 유실된 데이터 복원과 일정 시점의 상태로 데이터를 복원할 수 있습니다. 예를 들면, Windows OS의 복원 지점과 같이 장애나 데이터 손상 시 스냅샷을 생성한 시점으로 데이터 복구..