전체 글135 [Java] 자릿수별(n자리) Palindrome 수 개수 구하기 Palindrome 이란? 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열 등이다. 수로 예를 들면, 3, 131, 1221 등이 palindrome 수이다. 문제상황 1 이상, 10, 000 이하 정수 n이 주어졌을 때 palindrome인 n자리 수의 갯수를 구하라. 풀이 코드 class Solution { public int solution(int n) { if (n == 1) { return 10; } long ans = 1; for (int i = 0; i < n; i += 2) { ans = (ans * (i == 0 ? 9 : 10)); ans %= 1_000_000_007; // 오버플로우 방지 } return (int)ans; } } 2023. 1. 30. [자료구조] 트리 (Tree) 1. 트리(Tree) 개요 노드와 링크로 구성된 자료 구조 계층적 구조를 나타낼 때 사용할 수 있음 트리의 구조 노드(Node): 자료 값을 담고 있는 단위 에지(Edge): 노드 간의 연결선. (=간선, link, branch) 루트 노드(Root): 부모가 없는 노드, 트리의 최상단에 위치 잎새 노드(Leaf): 자식이 없는 노드 내부 노드(Internal): 잎새 노드를 제외한 모든 노드 부모(Parent): 직접 연결된 두 노드 중 상위의 노드 자식(Child): 직접 연결된 두 노드 중 하위의 노드 형제(Sibling): 같은 부모를 가지는 노드 깊이(Depth): 루트에서 어떤 노드까지의 간선의 수. 루트의 깊이는 0. 레벨(Level): 트리의 특정 깊이를 가지는 노드 집합 높이(Height.. 2023. 1. 20. [자료구조] 해시테이블(HashTable) vs 해시맵(HashMap) 비교 공통점 HashTable 과 HashMap 모두 Map 인터페이스의 구현체이다. 따라서 다형성에 따라 아래와 같이 Map으로 HashTable과 HashMap 객체를 받아 올 수 있다. // HashTable Hashtable ht = new Hashtable(); // HashMap HashMap hm = new HashMap(); Map map1 = ht; Map map2 = hm; 차이점 HashTable HashMap Key에 Null 사용 가능 여부 X O Thread-Safe O (멀티 스레드 환경에서 우수) X (싱글 스레드 환경에서 우수) synchronizedMap, ConcurrentHashMap 등으로 해결 가능 2023. 1. 17. [자료구조] 배열(Array) 1. 배열이란? 배열은 연속된 메모리 공간에 순차적으로 저장된 데이터 모음이다 같은 타입의 데이터로만 구성된다 배열 객체를 선언할 때 그 크기가 정해지며, 이후 변경할 수 없다 배열을 구성하는 각각의 값을 요소(element)라고 하며, 해당 요소의 위치를 인덱스(index)라고 한다 2. 장・단점 장점 인덱스를 이용한 접근이 가능하기 때문에 모든 요소에 빠르게 접근 가능 (배열의 크기와 관련 없이) 단점 데이터의 추가/삭제에 드는 비용이 큼 배열을 선언한 후에는 크기를 변경할 수 없음(정적 메모리) 3. 배열이 활용되는 경우 데이터의 추가, 삭제가 자주 일어나지 않을 때 특정 데이터에 대한 빠른 접근이 필요할 때 값의 저장 순서가 중요할 때 2023. 1. 17. 순열(Permutation) 순열(Permutation) 서로 다른 n개 중 r개를 순서 있게 배열하는 경우의 수 (중복 X) 중복 순열 서로 다른 n개 중 r개를 순서 있게 배열하는 경우의 수 (중복 O) 원 순열 서로 다른 n개를 원형으로 배치하는 경우의 수 ex) 원 모양의 테이블에 각자 이웃하는 사람의 구성이 다른 모든 경우의 수. 회전시켜서 같은 경우는 하나의 경우로 여김 코드(Java) public class Main { public static void main(String[] args) { int n = 6; int r = 3; // 순열 int p1 = 1; for (int i = n; i >= n - r + 1 ; i--) { p1 *= i; } // 중복 순열 int p2 = 1; for (int i = 0; i.. 2023. 1. 9. 조합(Combination), 중복조합 조합(Combination) 서로 다른 n개 중에서 r개를 선택하는 경우의 수 (중복 선택 X) 중복 조합 서로 다른 n개 중에서 r개를 선택하는 경우의 수 (중복 선택 O) 코드 (Java) public class Main { public static void main(String[] args) { int n = 6; int r = 3; System.out.println(getCombination(n, r)); // 조합 System.out.println(getCombination(n + r - 1, r)); // 중복 조합 } public static int getCombination(int n, int r) { int pResult = 1; for (int i = n; i >= n - r + 1 ;.. 2023. 1. 9. [Java] 예외 발생 시 무한반복하기 문제상황 아래와 같이 나이를 입력 받은 뒤, 입력받은 나이를 다시 출력해주는 프로그램을 작성한다고 가정해보자. 위와 같이 코드를 작성할 수 있다. 상식적인 선에서 본인의 나이를 정확하게 입력한다면 문제될 것이 없을 것이다. 하지만 언제나 상식적인 일만 발생하는 것은 아니기에 예외처리를 통해 다양한 경우에 대비할 필요가 있다. 예외 경우로서 크게 두 가지를 생각해볼 수 있을 것 같다. 1. 숫자가 아닌 문자(알파벳, 한글, 특수문자 등) 2. 수이긴 하나 양의 정수가 아닌 수(-30, 15.5 등) 예외 발생 시 while 문을 통한 무한 반복 while 문 내에 try-catch문을 위치시키고 해당 try-catch문에서 예외가 발생하지 않을 때에만 break를 통해 while을 빠져나갈 수 있도록 설계.. 2023. 1. 8. 왜 백엔드 개발을 선택했는가 (feat. 프론트엔드 vs 백엔드) 웹 어플리케이션 개발은 크게 프론트엔드 개발과 백엔드 개발로 나눌 수 있다. 각각의 특징에 대해 개략적으로 정리하고, 어떻게 내가 백엔드 개발을 선택하게 되었는지 이야기해보려 한다. Front-End 와 Back-End 비교 기본적으로 웹 개발에 있어서 프론트엔드(FE) 개발과 백엔드(BE) 개발은 상호보완적인 관계이다. 어느 한 쪽만으로는 정상적인 웹 사이트를 제작할 수 없다는 의미이다. 1. Front-End 프론트엔드는 웹사이트에서 사용자와 직접적으로 상호작용하는 부분을 말한다. 따라서 프론트엔드 개발이란 웹사이트에서 사용자에게 보여지는 화면을 구성하고, 사용자와 상호작용하기 위한 기술을 구현한다. HTML, CSS, JavaScript 등의 언어를 사용하여 글자, 이미지, 색상, 버튼, 메뉴 등 .. 2023. 1. 7. [프로그래머스] SELECT / 오프라인/온라인 판매 데이터 통합하기 풀이 본 문제의 주요 요구사항은 두 테이블(online_sale, offline_sale)을 하나의 테이블로 병합하여 출력하는 것이다. 이를 위해 'UNION ALL' 함수가 필요한데, 이를 사용하기 위해서는 두 테이블의 컬럼이 서로 같아야 한다. 하지만 user_id 컬럼이 online_sale에만 존재하기 때문에 offline_table에도 user_id 컬럼을 만들어 주되 그 안의 값은 NULL로 처리한다. 코드 SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') SALES_DATE, product_id, user_id, sales_amount FROM online_sale WHERE sales_date LIKE '2022-03-%' UNION ALL SELECT DATE_.. 2022. 12. 13. [프로그래머스] 베스트앨범(해시) - java https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이 문제에서 유의해야할 조건은 아래와 같다. 장르별 최대 두 곡까지만 수록한다. 장르별 재생횟수의 합이 가장 큰 장르부터 수록한다. 장르 내에서는 재생횟수가 가장 큰 곡부터 수록한다. 장르 내에서 재생횟수가 같을 경우 고유번호가 낮은 순서대로 수록한다. 이에 따라 문제는 다음과 같은 순서로 풀어나갔다. 장르별 재생횟수 총합 구한다. 해시맵 생성 장르 간 우선순위를 정립한다. 해시맵의 valu.. 2022. 12. 6. [프로그래머스] SELECT / 재구매가 일어난 상품과 회원 리스트 구하기 풀이 이 문제에서 주의해야할 부분은 '재구매'이다. 재구매란 같은 고객이 같은 물품을 중복 구매하는 것을 말한다. * 같은 고객이더라도 다른 물품을 구매했다면 재구매에 해당하지 않는다 따라서, 일단 GROUP BY의 대상은 user_id와 product_id가 된다. 이때 GROUP BY의 조건절에 해당하는 HAVING 함수가 중요한 역할을 한다. 구매내역의 id에 해당하는 online_sale_id를 기준으로 갯수를 파악했을 때 1보다 큰 경우(즉, 2 이상의 수)만 선택되도록 하여 재구매에 해당하는 내역만을 선별한다. 코드 SELECT user_id, product_id FROM online_sale GROUP BY user_id, product_id HAVING COUNT(online_sale_id.. 2022. 12. 6. [백준] 9465. 스티커 https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 풀이 주어진 N 값에 따라 가로의 길이가 결정되는 형태이므로 아래 코드와 같이 열을 기준으로 점화식을 세울 수 있었다. for (int j = 2; j 2022. 12. 4. 이전 1 ··· 4 5 6 7 8 9 10 ··· 12 다음