본문 바로가기

전체 글237

자료구조 참조 사이트(내가 보기 위해 만든 것) ArrayList와 LinkedList 차이 Today-I-Learn/Java/Collection/List/ArrayList vs LinkedList.md at master · wjdrbs96/Today-I-Learn :octocat: Today I Learned. 그날 그날 모든 활동들을 정리. Contribute to wjdrbs96/Today-I-Learn development by creating an account on GitHub. github.com 2024. 3. 26.
[백준] 7785번 회사에 있는 사람 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 문제 상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다. 각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다. 상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모.. 2024. 3. 25.
[프로그래머스] 과제 진행 / 우선순위 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 과제는 시작하기로 한 시각이 되면 시작합니다. 새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다. 진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다. 만약, 과제를 끝낸 시각에 새로 시작해야 되는 과제와 잠시 멈춰둔 과제가 모두 있다면, 새로 시작해야 하는 과제부터 진행합니다. 멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작합니다. 과제 계획을 담은 이차원 문자열 배열 pl.. 2024. 3. 14.
[프로그래머스] 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.