본문 바로가기

분류 전체보기153

[프로그래머스] Lv2 두 원 사이의 정수 쌍 첫 번째 시도(실패) - 규칙 찾기 반지름 1 - 5(4+1) 반지름 2 - 13(4+9) 반지름 3 - 29(4+25) 반지름 4 - 53(4+49) - 규칙 보여서 코드 짰음 - 예외가 있었음(규칙이 아니였던 거임) 테두리가 꼭 4점만 정수여야 하는 건 아님 두 번째 시도 (성공 and 타임아웃) x,y 각각 +1 하면서 x^2 + y^2 2024. 3. 12.
[클린코드] 5 ~ 10장 1. 클래스 200줄 넘기지 않기 2. 외부 클래스 바로 의존하지 않고 경계 클래스 두기 나쁜 예) Map sensors = SensorsFactory().get(); // 외부 라이브러리 Sensor s = sensors.get(sensorId); 좋은 예) public class Sensors { private Map sensors = SensorsFactory().get(); public Sensor getById(String id) { return sensors.get(id); } // 이하 생략 } 3. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트이다. 테스트 케이스가 있다면 공포는 사실상 사라진다. 테스트 커버리지가 높을수록 공포는 줄어든다. 4. 테스트 당 as.. 2024. 3. 4.
[클린코드] 4. 주석 1. 로직에 대한 설명을 주석으로 담지 마라 주석은 나쁜 코드를 보안하지 못한다. 주석으로 설명해야만 하는 코드는 나쁜 코드이다. 리팩토링을 고려하라. 2. 날짜에 대한 리턴타입을 제공하는 주석은 달아라 //kk:mm:ss EEE, MMM dd, yyyy 형식이다. Pattern timeMathcher = Pattern.compile( "||d*:||d||:d* ||w*, ||w* ||d*, ||d*"); 3. 코드로 설명할 수 있으면 주석을 달지마라. //기본 생성자 protected AnnaualDateRule() {} // this.closed가 true일 때 반환되는 유틸리티 메소드다. // 타임아웃에 도달하면 예외를 던진다. public synchronized oid waitForClose(fi.. 2024. 3. 4.
[클린코드] 3.함수 1. 함수 내에 추상화 레벨을 같게 한다. 추상화 수준이 높음. getHtml() getFile() 추상화 수준이 중간. String pagePathName = PathParser.render(pagepath) 추상화 수준이 낮음. .append("\n") 어느 정도까지 구현되어 있는지 헷갈리지 않게, 함수 내에 추상화 레벨이 같은 메소드들을 만든다. 2. 플래그 인수를 전달하지 마라. 함수로 boolean 값을 전달하는 것은, 대놓고 함수가 여러 가지 기능을 처리한다는 것을 나타내는 것이다. 플래그 인수를 전달하는 것이 아니라, 각각을 처리하는 함수를 따로 구현하는 것이 옳은 방법이다. 3. 인수가 3개가 넘어간다면 묶을 수 있는지 의심해봐라. Circle makeCircle(double x, doub.. 2024. 3. 4.
정순원의 코드 원칙 코드를 짜다 보면 어? 내가 이런 상황에서 어떻게 했지? 혹은 전에도 이와 같은 방법으로 코드를 짰나? 라는 의구심이 들 때가 있다. 역시나 전에 코드를 보면 지금의 코드 스타일과는 다르게 써져있다. 예를 들면 Controller에서 Service를 호출할 때 RequestDTO를 그대로 넘겨줬나 DTO를 분해해서 넘겨줬나? 엔티티를 Response로 변환할 때 어디서 책임을 맡았지? 등과 같은 생각이다. 통일성은 코드 가독성에 크게 영향을 주기 때문에 나만의 코드원칙을 세워야겠다고 다짐했다. 물론 이러한 문제들은 팀마다 규칙이 다르다. 그러더라도 나만의 기준을 세우고 지금부터라도 통일성을 갖는 연습을 하는 것이 중요하다 생각한다. 취직을 하고 팀이 생긴다면, 후에 그 팀내 규칙을 따르면 된다. 1. D.. 2024. 2. 27.
[프로그래머스] 소수찾기(완전탐색, 소수 찾기) 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 사고 과정 완전 탐색으로 숫자 조합 배열에 저장하기 배열 하나씩 돌면서 소수 찾기 코드 import java.util.HashSet; public class Solution { HashSet numberSet = new HashSet(); public int solution(String numbers) { permutation("", numbers); // 가능한 모든 숫자 조합 생성 return (int) numberSet.stream().filter(this::isPrime).count(); // 소.. 2024. 2. 23.
[프로그래머스] 완전탐색, 규칙찾기 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 배운 점 완전탐색 문제를 선택해서 완전탐색 문제인지는 알고있었다. 그래도 처음 봤다고 생각하고 이 문제를 어떻게 풀지 생각했다. 규칙 찾기 시도 yellow가 24개이고 24x1 줄 일때 브라운은 26+26+1+1= 54 개이다 yellow가 24개이고 12x2 줄 일때 브라운은 14+14+2+2= 30 개이다 yellow가 24개이고 8x3 줄 일때 브라운은 10+10+3+3 = 26 개이다 yellow가 24개이고 6x4 줄 일때 브라운은 8+8+4+4 = 24개이다 공식이 보인다. (엘로우 가로+ .. 2024. 2. 23.
완전탐색(브루트 포스), 백트래킹 https://school.programmers.co.kr/learn/courses/30/lessons/258709 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr A가 고를 주사위의 총 경우의 수 구하기 < - 완전탐색 static int n; static boolean[] visited; static List diceComb; static void permutation(int depth, int index, int[] arr) { if (depth == n / 2) { diceComb.add(arr.clone()); //깊은 복사 return; } fo.. 2024. 2. 23.
[프로그래머스] 요격 시스템(정렬, 그리드 / 자바) 문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 주황색은 폭탄이 날라가는 구간이다. 우린 이 폭탄을 미사일로 요격해야 한다. 이때 최소로 필요하는 요격 미사일 개수를 구하면 되는 문제다. 입출력 예 설명 사진 - 프로그래머스 출처 풀이 어떤 유형의 문제인지 파악하는 것이 첫 번째이다. 정렬, 그리드 문제이다. 그리드 알고리즘 : 매 순간 최적이라고 생각되는 선택을 해나가면서 최종적인 해답에 도달하는 방식 이차원 배열을 첫번째 원소 기준으로 오름차순으로 정렬한다. 카운트를 해주며 요격 구간을 변경한다. 이전 폭탄구간에 현재 폭탄 시작점이 들지.. 2024. 2. 20.