개발(93)
-
02.01 그리디 알고리즘 1 (JAVA)
그리디알고리즘(Greedy Algorithm) 그리디(Greedy)란 '탐욕스러운, 욕심 많은'이란 뜻입니다. 그리디 알고리즘은 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방식입니다. 하지만 순간의 최적의 선택을 한다고 해서 최종적인 해답이 최적이라는 보장은 없습니다. 따라서 그리디 알고리즘을 적용할 수 있는 문제들은 지역적으로 최적이면서 전역적으로도 최적인 문제들일 때 그리디 알고리즘을 적용할 수 있습니다. 가장 중요한 점은 그리디 알고리즘을 이용하면 최적해를 찾지 못할 수도 있다는 것을 항상 명심해야합니다. 그리디 알고리즘을 적용하여 최적해를 구할 수 있는 문제의 조건 greedy choice property : 현재 선택이 이 후의 선택에 영향을 주지 않습니다..
2023.02.01 -
01.31 모의고사(JAVA)
1. 신대륙 발견 기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다. 항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자. 제한 조건 1 ≤ month ≤ 12 1 ≤ day ≤ 31 (2월은 28일로 고정합니다, 즉 윤일은 고려하지 않습니다.) 입출력 예 month day result 11 27 "3월 5일" 6 22 "9월 28일" 지정 입력값 month day result 1 18 '4월 26일' public class Main { public String solution(int year, int month, int day) { String answer = ""; Calendar cal = ..
2023.01.31 -
01.30 알고리즘
알고리즘에 대한 조건 알고리즘에 대한 조건 입력 : 외부에서 제공되는 자료 출력 : 적어도 2개 이상의 서로 다른 결과 출력 명확성 : 수행과정은 무엇을 하기 위한 것인지 명확하게 정의 유한성 : 알고리즘의 명령어 대로 수행했을 때 처리된 후 종료 효율성 : 시-공간적 효율성을 가져야 하며 명백하게 실행가능 좋은 알고리즘이란? 문제를 정확히 해결해야 합니다. 알고리즘의 가장 중요한 역할은 문제를 정확히 해결하는 것입니다. 빠르게 처리해야 합니다. 신속, 정확! 어떤 일이든 빠르고 정확하게 해결한다는 건 그만큼 시간이라는 자원을 아낄 수 있다는 뜻이며, 같은 연산도 더 빠르게 수행할 수 있게 해준다면 아주 좋은 알고리즘입니다. 최소의 자원으로 최대의 효율을 내야합니다. 문제 해결이라는 목적에 필요한 기능만..
2023.01.30 -
01.28 TIL
오늘은 프로그래머스 콜라츠 추측을 연구했습니다. public class Solution4 { public int solution(int num) { int answer = 0; while(num!=1){ // int num이 1이 아닐 경우 if(answer==500){ // 500번 수행을 했을 경우 answer=-1; // answer를 1개씩 빼주고 break; // if문을 break 한다 } num = num % 2 == 0 ? num / 2 : num * 3 + 1; // 입력된 수가 짝수라면 2로 나누고 홀수라면 3을 곱하고 1을 더합니다. answer++; // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. } return answer; } } 열심히 풀어서 프로그래머스에 돌렸..
2023.01.28 -
01.27 TIL
프로그래머스 "2016년" 풀이내용 public String solution(int a, int b){ String answer = ""; String[] day = {"FRI","SAT","SUN","MON","TUE","WED","THU"}; int [] date = {31,29,31,30,31,30,31,31,30,31,30,31}; int allDate = 0; for (int i = 0; i < a-1; i++) { allDate += date[i]; } allDate +=(b-1); answer = day[allDate %7]; return answer; } 풀이 풀이 : 1월1일이 금요일이므로, 금요일부터 시작하여 달의 마지막날짜를 month 배열에 저장을 한다 그리고 date라는 변수를 초..
2023.01.27 -
01.26 SOLID
단일 책임 원칙 "어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다" - 로버트 C. 마틴 '하나의 객체는 단 하나의 책임을 가져야 한다' 왜? 객체는 꼭 하나의 책임을 가져야 하는 걸까요? 단 하나의 책임을 갖는 객체 예를 들어서 회사-개발자, 국방부-예비군, 여자친구-남자친구 이런식으로 개발자 클래스, 예비군 클래스, 남자친구 클래스와 같이 역할과 책임을 클래스별로 분리하여 연관이 있는 클래스와 각각 따로 관계를 맺는 것이 서로 영향을 미치지 않아야 합니다. Calculator에게 주어진 책임과 역할이 너무 큽니다. 각각의 연산자의 연산 과정에 변화가 생겼을 때 Calculate 메서드의 크기가 비대해 지거나 다른 연산 과정에 영향을 미칠 수 있습니다. 개방-폐쇄 원칙 "소프트웨어 엔티티(클..
2023.01.26