분류 전체보기 (401) 썸네일형 리스트형 [UML] 클래스 다이어그램 (Class Diagram) 출처: https://brownbears.tistory.com/577 클래스 다이어그램은 구조 다이어그램으로 클래스 내부 구성요소 및 클래스 간의 관계를 도식화하여 시스템의 특정 모듈이나 일부 및 전체를 구조화 합니다. 개발 하기 전, 클래스 다이어그램을 그리게 되면 시스템 내 클래스 간의 의존성 파악과 팀원들 간 의사소통이 편리합니다. 클래스 다이어그램의 목적에 따라 개념, 명세, 구현 단계로 나눌 수 있습니다. 개념 단계에서는 클래스만 도출하고 관계를 단순화하는 것이 목적입니다. 명세와 구현 단계에서는 개발 직전 설계나 구현 이후 설명 목적으로 사용되고 이 다이어그램을 기반으로 코드로 구현하거나 코드를 기반으로 다이어그램을 그리기 때문에 코드와 연관이 깊습니다. 요소 (element) 클래스 클래스 .. 백준(BOJ) 13164번 행복 유치원 문제를 읽고 "어떻게 이 문제를 탐욕적 알고리즘과 연관시켜 멋지게 해결할 수 있을까?"라고 생각했다. 도저히 염두가 나지 않아 바로 답을 보았다. 해결의 키는 주워진 수의 조로 분할 한다는 것이고 이는 각각의 원생들 사이 중에서 어느곳에다 분별의 막대기를 둘지 선택하는 문제임을 인지하는데 있다. 어디다 막대기를 두어야 하는가? 원생들은 서로 인접해야 한다고 했으므로(이게 정말 중요함) 원생들의 키차이가 가장 많은 곳에 막대기를 두어 다른조로 구분해 내면 된다. 그렇게 되면 그 큰 키차이가 없어진다. 즉, 원생들의 키의 차이를 모두 구한 자료구조 리스트를 구하고 그 리스트를 오름차순 정렬한다.그 후 height.length-(groups-1)를 구한후 그보다 1더 작은 위치까지 모두 더해 주면 된다(아래코.. 백준(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 in.. 이전 1 ··· 38 39 40 41 42 43 44 ··· 51 다음