[Java] 사용자 정의 정렬, 어떤 방식을 써야 할까? (Comparator vs Comparable)
·
Coding-Test/Implementation Tips
코딩테스트 문제를 풀다보면, 정렬을 해야하는 상황이 많다.이 때, 단순히 오름차순/내림차순 배열이면 쉽게 매서드 하나 뚝딱 써서 정렬할 수 있지만, 보통은 문제를 풀기 위해 특정 계산 결과나, 나만의 정렬 기준에 따라 정렬 기준을 직접 정의해야 할 때가 있다. 문제를 풀다가 내가 사용한 방식과, 코드트리의 정답 풀이가 정렬 방식에서 약간 달라서 정리해보려고 한다 우선, 그리디로 배낭문제를 풀기 위해, 보석의 가치/보석의 무게의 비율을 구해, 그것을 정렬해야 했다.정렬 구현 방식 비교방법 1) Comparator 람다 활용 class Treasure{ int w; int v; double realValue; public Treasure(int w, int v, double real..
문자(char)를 숫자(int)로 바꿀 때, 아직도 if문 쓰시나요? (ASCII Mapper)
·
Coding-Test/Implementation Tips
코테 Simulation유형 문제를 풀다보면, 아래와 같이 방향 정보의 입력이 char( 'U', 'D', 'L', 'R' )로 주어지는 상황을 자주 만나게 된다.보통은 아래처럼 if-else나 switch문을 사용하곤 했다public static int dirToInt(char dir) { if (dir == 'U') return 0; else if (dir == 'D') return 1; else if (dir == 'R') return 2; else return 3; // 'L'} 이 방식도 크게 복잡하진 않지만, 삼성 코딩테스트처럼 방향이 8방향으로 주어지거나, 변환해야할 문자가 많아지면 코드가 길어지고 가독성이 떨어진다. 이 때, 사용할 수 있는 유용한 방법이 바로 ASCI..
객체생성 패턴 정리 - 빌더 패턴,정적 팩토리 매서드
·
개발/Server
객체를 생성하는 방법에는 여러 가지가 있지만, 그 중에서도 정적 팩토리 매서드와 빌더 패턴이 자주 사용된다.이 두 가지 방법은 각각 고유한 장점과 사용 목적이 있기 때문에, 상황에 따라 적절히 선택해야한다! 📌객체생성 패턴 정리1. new 키워드를 사용한 기본 객체 생성가장 기본적인 객체 생성 방법은 new 키워드를 사용하는 것이다.User user = new User();장점직관적이고 쉽게 사용할 수 있다단순 객체 생성 시 성능 면에서 유리하다단점가독성 부족: 생성자의 매개변수가 많아지면 각 값이 어떤 의미를 가지는지 파악하기 어렵다.유연성 부족: 생성자 이름은 항상 클래스 이름과 같아야 하므로, 다양한 객체를 생성하기 위한 이름을 제공하지 못한다. 2. 정적 팩토리 매서드정적 팩토리 매서드는 객체..
[백준 3085] 사탕 게임 - Python
·
Coding-Test/PS
🌵 문제🌵 입출력 예시예제 입력 1 3CCPCCPPPC예제 출력 1 3예제 입력 2 4PPPPCYZYCCPYPPCC예제 출력 2 4예제 입력 3 5YCPZYCYZZPCCPPPYCYZCCPPZZ예제 출력 3 4 🌵 문제 풀이 모든 경우의 수를 탐색하여 최적의 결과를 찾는 완전 탐색 기법을 사용했다.접근 방법교환 가능한 모든 경우를 탐색한다.가로로 인접한 두 사탕을 교환세로로 인접한 두 사탕을 교환교환 후, 가장 긴 연속된 사탕의 갯수를 계산한다.가로 탐색 -> 한 행씩 검사해서, 연속된 같은 색상의 사탕 갯수 세기세로 탐색 -> 한 열씩 검사해서, 연속된 같은 색상의 사탕 갯수 세기모든 경우의 결과 중 최댓값을 출력구현 단계search 함수 :  2차원 배열을 입력받아 가로와 세로에서 각각 최대 연속..
[프로그래머스 LV0] 정수를 나선형으로 배치하기
·
Coding-Test/PS
백준 '로봇청소기'에서 호되게 당했기 때문에, 유사문제로 풀어봤다.lv0이라 쉬울 줄 알았는데 접근하기 꽤나 어려웠다..이런 유형 왜이렇게 어렵지..💫문제 💫동작 원리상,하,좌,우로 이동하는 케이스에 따라서, 인덱스 i,j가 각각 고정/증가/감소 세 가지 경우의 형태로 움직이기 때문에, 케이스 분류가 꼭 필요했다.그 과정에서 핵심은,경계값을 동적으로 조정하여 위쪽, 아래쪽, 왼쪽, 오른쪽의 경계를 좁혀 나가면서 숫자를 배열에 나선형으로 채우는 것이었다. 경계 설정 (top, bottom, left, right):top: 현재 배열의 위쪽 경계.bottom: 현재 배열의 아래쪽 경계.left: 현재 배열의 왼쪽 경계.right: 현재 배열의 오른쪽 경계. 방향 설정 및 경계 조정 오른쪽 이동 (righ..
[백준 14503] 로봇청소기 (구현,시뮬레이션)
·
카테고리 없음
🍫문제그냥 차근차근 조건에 따라서 구현하면 되는 문제였다.   이 문제는 2017년 상반기 삼성 그룹 오후 1번 문제이다. LG CNS기출과 유사한 문제이기도 하다.추천 사이트에서 발견했는데,,,,,결국 딜레마에 빠져 해결하지 못했다. 흑흑... 반성을 좀 해보자면1. 어?쉽네? 하고 문제를 제대로 설계하지 않고 문제풀이에 뛰어들었다.->그러다보니 하드코딩의 늪에 빠짐...2. 아직 재귀호출,반복문,조건문을 적절히 언제 써야하는지 잘 안잡혀 있는 느낌이다.. -> 컨디션 좋으면 잘풀리고, 안좋으면 이상한 길에 빠져버림(특히 재귀호출) -> 실전 코테는 컨디션이 좋을 리가 없다는 거! 더 연습하자 +골드의 벽은 높다 🍫풀이로봇청소기의 동작 원리는 아래와 같다1. 현재 칸이 아직 청소되지 않은 경우, 현..
[백준 1149] RGB거리 (DP)
·
Coding-Test/PS
🌰문제RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다.집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.1번 집의 색은 2번 집의 색과 같지 않아야 한다.N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.입력첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같..
[백준 2730] 오늘은 OS 숙제 제출일
·
Coding-Test/PS
🍉문제   🍉문제 해석숙제 마감일과 제출일이 주어졌을 때, 제출일이 마감일에 비해 얼마나 이전인지 또는 이후인지를 판단하고, 결과를 적절히 출력하는 문제이다. ** 제출일에는 연도가 명시되지 않기 때문에, 가장 가까운 연도를 추정하여 비교를 수행하도록 하였다!이 부분이 가장 까다로웠던 부분인 듯 하다. 🍉문제 접근법1. 윤년과 월별 일수 처리 윤년을 고려하여 월별 일수를 정확히 계산해야 했다.2월의 경우, 윤년에 따라 28일 또는 29일을 반환하는 것을 잊지 말자!days_in_month 함수로 구현하였다.thirty_days_month = [4, 6, 9, 11]thirty_one_days_month = [1, 3, 5, 7, 8, 10, 12]def days_in_month(month, year..