전체 글

Love what you do
* 이차원 배열 대각선인지 판단abs(열 - 열) == abs(행 - 행) public class Main { static int n = 4; static int[] board = new int[n]; static int cnt; public static int nQueen(int row) { if (row == n) { cnt++; for (int i = 0; i 백트랙킹이라 안하는거 아닌지 -> 그게 아니라 한 row에 퀸이 어디어디 들어갈 수 있는지 각 상황을 보는 것.. for (int i = 0; i 기존에 퀸을 놓은 자리(i)와 현재 놓을 자리(row)를 비교하는 것 // 이곳이 가지치..
·백엔드/Spring
https://www.yes24.com/Product/Goods/126845564이번 시간에는 자바/스프링 개발자를 위한 실용주의 프로그래밍 4장 - SOLID를 읽고 정리해보겠습니다.   SOLID 원칙의 목적 - 응집도를 높이고 의존성을 낮춘다. 본론에 들어가기에 앞서, 가장 먼저 책에서 말하고자하는 SOLID의 원칙의 목적은 무엇일까? SOLID 원칙이 추구하는 것은 바로 "객체지향의 설계".그리고 설계 원칙을 통하여 소프트웨어의 응집도를 높이고 의존성을 낮추는 것을 목표로 함. SOILD 원칙을 무작정 암기하는 것보다 "응집도를 높이고 의존성을 낮추는 것에 집중"하는 것이 좋다.   유지보수성을 판단하는 세 가지 맥락 - 영향 범위, 의존성, 확장성설계 관점에서 코드의 유지보수성을 판단하는 세 ..
// 배낭에 물품을 담으려고 한다.// 배낭에는 k 무게 만큼의 물품을 담을 수 있다.// n 개의 물품이 주어지고 이 물품의 무게와 가치 정보가 items 2차원 배열에 주어졌을 때,// 최대 가치가 되도록 물품을 담았을 때의 가치를 출력하는 프로그램을 작성하세요.// 입출력 예시// items: {{6, 13}, {4, 8}, {3, 6}, {5, 12}}// n: 4// k: 7// 출력: 14public class Main { public static int solution(int[][] items, int n, int k) { Arrays.sort(items, (x, y) -> x[0] - y[0]); //무게가 작은 물품 먼저 int[][] dp = new int..
·백엔드/Spring
안녕하세요. 이번 게시물에선 자바/스프링 개발자를 위한 실용주의 프로그래밍 3장 - 행동을 읽고 정리해보겠습니다.또한 객체지향사상에 부합하지 않는 java interface의 default 메서드에 대한 고찰도 짤막하게 해보았습니다.  데이터 위주 사고 방식 VS 행동 위주 사고 방식public class Car { //데이터 위주의 사고 방식 private Frame frame; private Engine engine; List wheels; private float speed; private float direction;}public class Car { //행동 위주의 사고 방식 public void drive(){} public void changeDirect..
public class Main { // 피보나치 수열 일반풀이 방법 O(n^2) // 계산했던 부분도 다시 계산 // f(n) = f(n-1)+f(n-2) public static int fib(int n) { if (n == 0) { return 0; } if (n == 1) { return 1; } return fib(n - 1) + fib(n - 2); } // 타뷸레이션 방식 -> for문 - O(n) public static int fibDP(int n) { int[] arr = new int[n 재귀 - O(n) static int[]..
가장 긴 팰린드롬 부분 문자열을 출력하라input: dcbabcddoutput: dcbabcd  /** * 팰린드롬은 짝수 / 홀수 케이스 구분하는 것 주의 */class Solution { public String longestPalindrome(String s){ if(s.length() == 1){ return s; } String result = s.substring(0, 1); //제일 작은 팰린드롬은 글자 하나 (한글자도 팰린드롬이라고 보는 경우) for (int i = 0; i oddStr.length() ? evenStr : oddStr; result = result.length() > lon..
·미완성
1. 컨트롤러 (표현계층) 2. 서비스 (비즈니스로직) 3. 엔티티 (핵심 도메인) 세부분 다 있으면 좋음 1. 컨트롤러 계층 - 빠른 사용자 피드밸 - 간단 검증을 분리 - 누락 가능성 작음 (입력값마다 검증하므로) ->> 다른 컨트롤러 계층에서 서비스를 호출할때 해당 컨트롤러에 동일 혹은 비슷한 검증을 중복적으로 발생. - 2. 비즈니스 계층 -> 필수 -> 다른 클라이언트들에게 호출될 것도 고려 가능 - 컨트롤러계층과 도메인핵심검증을 흡수 할 수 잇으나 - 검증이 너무 길어질 경우 핵심 검증, 핵심 로직에 대한 가독성이 많이 안좋아짐 - 누락에 대한 가능성이 존재 (의식적인 검증) --> 팀내에서 프레젠테이션 검증 대신 서비스 메서드의 인자를 valid로 검증하고 -> 핵심 검증 로직응 서비스 밸리..
// 정수형 배열 nums 가 주어졌다.// 연속된 부분 배열의 합 중 가장 큰 값을 출력하세요.// 입출력 예시// nums: -5, 0, -3, 4, -1, 3, 1, -5, 8// 출력: 10// nums: 5, 4, 0, 7, 8// 출력: 24public class Main { public static int solution(int[] nums) { return divideSubArray(nums, 0, nums.length - 1); } private static int divideSubArray(int[] nums, int left, int right) { if (left == right) { return nums[left]; ..
·백엔드/Spring
안녕하세요. 이번 게시글에선 자바/스프링 실용주의 프로그래밍 2부 - 객체의 종류를 읽고 정리해보았습니다. 또한 현재 개인 프로젝트로 DTO로 Record로 사용하는 것이 어떤 의의가 있는지도 알아보겠습니다. 2부 객체의 종류 VO - 값 객체값 객체 예시 코드 (엄밀히 말해서 Color 클래스는 객체가 아님. 해당 클래스로 만들어진 객체가 VO)public class Color { public final int r; public final int g; public final int b; public Class(int r, int g, int b) { //.. 검증 로직 this.r = r; this.g = g; this.b = b; } @Override public boolean equals(Objec..
·백엔드/Spring
안녕하세요. 이번 시간에는 자바/스프링 실용주의 프로그래밍 책을 읽고 정리해보고제 생각을 공유하는 게시글을 작성해보겠습니다.  1부 객체지향  객체지향에서는 복잡한 문제를 역할과 책임에 따라 '개별 객체'로 분해합니다.분해된 각기 다른 특성과 기능의 객체들이 상호작용하고 협력해 문제를 해결합니다.  01 절차지향과 비교하기 컴퓨터 공학에서 말하는 Procedure는 '함수'를 가리킵니다. (순차지향 = 어셈블리어, 절차지향 = C언어)따라서 절차지향 프로그래밍은 함수 지향 프로그래밍. 아래는 자바를 사용하지만 함수 위주의 프로그래밍으로 코딩한 절차지향 코드의 예시. @Service@RequiredArgsConstructorpublic class RestaurantChainService { priva..
꾸준함의 미더덕
꾸준함의 미더덕