본문 바로가기
백준 18870 : 좌표압축 (TreeMap) TreeMap  문제수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.입력첫째 줄에 N이 주어진다.둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.출력첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.제한1 ≤ N ≤ 1,000,000-109 ≤ Xi ≤ 109예제 입력 1 복사52 4 -10 4 -9예제 출력 1 복사2 3 0 3 1예제 입력 2 복사61000 999 1000 999 100.. 2024. 12. 19.
빠른 입출력 실험하기(버퍼리더 + 스트링빌더) 오름차순 정렬 후 하나씩 뱉는 문제를 풀다가 뭐가 젤 나은지 궁금해져서 해봤다 일단 버퍼리더랑 스트링빌더 조합이 가장 빨랐다 1. 스캐너 + stringbuilder진짜 정말 느리다..import java.util.*;import java.io.*;public class Main { public static void main(String[] args) throws IOException{ Scanner in = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int n = in.nextInt(); int[] arr= new int[n]; for (int i =0; i  2.. 2024. 12. 17.
가격대 별 상품 개수 구하기 GROUP BY https://school.programmers.co.kr/learn/courses/30/lessons/131530 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr • 풀이 처음에는 CASE 구문으로 풀어보려고 했다가 실패..하고 풀이를 찾아보니 나눗셈을 이용해서 푸는 방법이 있었다 만원 단위로 그룹을 짓는걸 나눗셈과 FLOOR 메서드를 이용해서 만 단위로 해서 처리하고다시 * 10000을 해서 만원 단위로 깔끔하게 나오게 끊는 쿼리 SELECT PRICE, FLOOR(PRICE/10000) FROM PRODUCT위 처럼 만의자리 숫자만 남게 나와서 해당 숫자를 기준으로 그룹바이를 하면 1만원대.. 2만.. 2024. 12. 17.
백준 1730 : 판화 (구현) 문제W대학교 미술대학 조소과에서는 지루한 목판화 작업을 하는 학생들을 돕기 위해 판화 기계를 제작하였다.기계는 로봇 팔이 쥔 조각도를 상하좌우 네 방향으로 움직일 수 있는 구조로서, 조각도 아래에 목판을 놓으면 그 위에 선들을 자동으로 그어주는 기능을 가지고 있다.목판에는 N2개의 점들이 일정한 간격으로 N행 N열의 격자모양을 이루며 찍혀있다. 처음 로봇의 조각도를 올려놓는 위치는 항상 이 점들 중 맨 왼쪽 맨 위의 꼭짓점이다.로봇 팔을 움직이는 명령의 순서가 주어졌을 때, 목판 위에 패인 조각도의 혼적을 출력하는 프로그램을 작성하시오.판화 기계는 작동 도중 로봇 팔이 격자 바깥으로 나가도록 하는 움직임 명령을 만나면, 무시하고 그 다음 명령을 진행한다.입력첫째 줄에 목판의 크기 N (2 ≤ N ≤ 10.. 2024. 12. 16.
입양 시각 구하기(1) - GROUP BY, DATE 자료형 변환 https://school.programmers.co.kr/learn/courses/30/lessons/59412 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr • 24시 형식으로 시간 구하기TO_CHAR(DATETIME,'HH24') • 24시 형식으로 시간 01, 02, 03.. 형태가 아닌 1, 2, 3 형태로 구하기TO_CHAR(DATETIME,'FMHH24')FM을 붙이면 Fill Mode로 동작해서 09가 아닌 9로 들어가게 된다 • TO_CHAR로 문자열로 변환한 DATE 자료형 숫자로 변환하기TO_NUMBER(TO_CHAR(DATETIME,'HH24')) HOURTO_NUMBER 메서드로.. 2024. 12. 16.
년, 월, 성별 별 상품 구매 회원 수 구하기 - group by https://school.programmers.co.kr/learn/courses/30/lessons/131532 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 구매기록이 있는 회원 아이디 월별 조회SELECT USER_ID, TO_CHAR(SALES_DATE, 'YYYY-MM') ODATE, SALES_DATE FROM ONLINE_SALE GROUP BY USER_ID, TO_CHAR(SALES_DATE, 'YYYY-MM'), SALES_DATE 2. 년, 월, 성별별로 그룹바이하면서 id 중복되지 않게 세어주기 SELECT TO_CHAR(SALES_DATE,'YYYY') YE.. 2024. 12. 16.
백준 3085 사탕게임 문제상근이는 어렸을 적에 "봄보니 (Bomboni)" 게임을 즐겨했다.가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그 다음 고른 칸에 들어있는 사탕을 서로 교환한다. 이제, 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 고른 다음 그 사탕을 모두 먹는다.사탕이 채워진 상태가 주어졌을 때, 상근이가 먹을 수 있는 사탕의 최대 개수를 구하는 프로그램을 작성하시오.입력첫째 줄에 보드의 크기 N이 주어진다. (3 ≤ N ≤ 50)다음 N개 줄에는 보드에 채워져 있는 사탕의 색상이 주어진다. 빨간색은 C, 파란색은 P, 초록색은 Z, 노란색은 Y로 주어진다.사탕의 색이 다른 인접한 두 칸이 존재하는.. 2024. 12. 15.
11068 : 회문인 수 문제어떤 수를 왼쪽부터 읽어도, 오른쪽부터 읽어도 같을 때 이 수를 회문인 수라고 한다. 예를 들어, 747은 회문인 수이다. 255도 회문인 수인데, 16진수로 표현하면 FF이기 때문이다. 양의 정수를 입력받았을 때, 이 수가 어떤 B진법 (2 ≤ B ≤ 64)으로 표현하면 회문이 되는 경우가 있는지 알려주는 프로그램을 작성하시오. B진법이란, 한 자리에서 수를 표현할 때 쓸 수 있는 수의 가짓수가 B라는 뜻이다. 예를 들어, 십진법에서 B는 10이다. 입력입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 테스트 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 64 이상 1,000,000 이하인 하나의 정수로 주어진다.출력출력은 표준출력.. 2024. 12. 15.
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 - 그룹바이 https://school.programmers.co.kr/learn/courses/30/lessons/151139 • 풀이 1. 8월~10월 중 대여횟수가 5회 이상인 car_id를 구한다 select car_id from CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE TO_CHAR(START_DATE,'YYYY-MM') BETWEEN '2022-08' AND '2022-10' GROUP BY CAR_ID HAVING COUNT(car_id) >= 5 2. 안에서 구해진건 car_id 뿐이고 전체 그룹쿼리에서는 다시 한번 위처럼 8~10월 .. 2024. 12. 10.
자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 - 조인 https://school.programmers.co.kr/learn/courses/30/lessons/157340 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr차량 대여 일지를 보고 특정 날짜에 대여중인지 아닌지를 구분하는 쿼리 10/16/일에 대여중인 차량의 id를 구하는 쿼리SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORYWHERE '2022-10-16' BETWEEN TO_CHAR(START_DATE, 'YYYY-MM-DD') AND TO_CHAR(END_DATE, 'YYYY-MM-DD' 위의 id에 포함되면 대여중, 아니면 대여 가능으로 표기한다CA.. 2024. 12. 9.
상품을 구매한 회원 비율 구하기 - 플머 https://school.programmers.co.kr/learn/courses/30/lessons/131534 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr • 풀이 2021년도에 가입한 유저 ID, 유저수를 USER_INFO에서 빼온다둘이 동시에 빼오지는 못해서 각각 서브쿼리로 빼오고  -- 2021 가입한 유저 ID ( SELECT USER_ID FROM USER_INFO WHERE TO_CHAR(JOINED,'YYYY') LIKE '2021%') U-- 2021 가입한 유저 수 ( SELECT COUNT(USER_ID) CNT .. 2024. 12. 4.
그룹별 조건에 맞는 식당 목록 출력하기 - 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/131124 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr • 풀이 조인된 테이블에서 가장 많이 리뷰를 작성한 사람을 찾아서 가져오는 문제 1. 리뷰 가장 많이 한 사람이 리뷰 몇번이나 했는지를 찾기SELECT MAX(COUNT(1)) FROM REST_REVIEW GROUP BY MEMBER_ID 2.  해당 횟수만큼 리뷰한 멤버아이디들을 조회하기 SELECT MEMBER_ID FROM REST_REVIEW GROUP BY MEMBER_ID HAVING COUNT(1) =.. 2024. 12. 3.
백준 3273 : 두 수의 합 문제n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i 입력첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)출력문제의 조건을 만족하는 쌍의 개수를 출력한다.예제 입력 1 복사95 12 7 10 9 1 2 3 1113예제 출력 1 복사3 • 풀이 전형적인 투 포인터, 정렬 후 양 끝에서 가운데로 오면서 탐색하는 구조 중복되는 숫자도 없어서 오름차순 정렬 후 투포인터로 풀렸다import java.io.*;import j.. 2024. 12. 1.
백준 10431 : 줄세우기 문제초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1번, 그 다음이 2번, ... , 가장 큰 아이가 20번이 된다. 강산이네 반 아이들은 항상 20명이며, 다행히도 같은 키를 가진 학생은 한 명도 없어서 시간이 조금 지나면 아이들은 자기들의 번호를 인지하고 한 줄로 세우면 제대로 된 위치에 잘 서게 된다.하지만 매년 첫 며칠간 강산이와 강산이네 반 아이들은 자기가 키 순으로 몇 번째인지 잘 알지 못해 아주 혼란스럽다. 자기 위치를 찾지 못하는 아이들을 위해 강산이는 특별한 방법을 생각해냈다.우선 아무나 한 명을 뽑아 줄의 맨 앞에 세운다. 그리고 그 다음부터는 학생이.. 2024. 12. 1.
문자열 관련 메서드, 사용법 정리 contains(특정 문자열) indexOf  메서드 str.chartAt(i) string.charAt(i) == 'A' 식으로 비교 문자열 뒤집기StringBuilder를 사용하면 편함StringBuffer sb = new StringBuffer(s[i]);String reverse = sb.reverse().tostring(); Character.isAlphabetic(char) str.indexOf(str.charAt(i))==i String sb = new StringBuilder(s1).reverse().toString();문자열 뒤집기, StringBuilder를 이용 String s1 = s.toUpperCase().replaceAll("[^A-Z]", "");replaceAll에 정규식을.. 2024. 11. 27.
오프라인/온라인 판매 데이터 통합하기 https://school.programmers.co.kr/learn/courses/30/lessons/131537?language=oracle 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr !오프라인은 USER_ID가 없기에 NULL로 넣는다!ORDER BY는 UNION 할 시에도 마지막에 넣어야 한다!ORDER BY 할때 SELECT에 쓴 순서대로 지정해서 굳이 컬럼명 안쓰고도 정렬할 수 있다SELECT TO_CHAR(SALES_DATE,'YYYY-MM-DD') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNTFROM ONLINE_SALE WHERE TO_CHA.. 2024. 11. 22.
조건에 맞는 회원수 구하기(DATE 문자열 변환) https://school.programmers.co.kr/learn/courses/30/lessons/131535?language=oracle 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr TO_CHAR(DATE형 컬럼, 포맷)으로 DATE를 문자열로 변환할 수 있다 SELECT COUNT(*) FROM USER_INFO WHERE TO_CHAR(JOINED,'YYYY') = '2021' AND AGE BETWEEN 20 AND 29; 2024. 11. 19.
상위 N개 레코드(N개 출력 - ROWNUM, FROM 절 서브쿼리) https://school.programmers.co.kr/learn/courses/30/lessons/59405?language=oracle 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 들어온 날짜가 가장 오래된 동물의 이름을 고르는 문제 SELECT NAME, DATETIMEFROM ANIMAL_INSWHERE ROWNUM  ROWNUM 키워드로 1개를 뽑아냈지만 정렬이 제대로 되지 않았다 -- 정답아래처럼 FROM 절 서브쿼리로 정렬된 컬럼을 먼저 뽑아낸 다음 갯수를 제한해주는 방식으로 제대로 가장 먼저 들어온 원숭이를 찾을 수 있었다SELECT NAMEFROM (SE.. 2024. 11. 19.
백준 2108 : 통계학(구현?) 문제수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.산술평균 : N개의 수들의 합을 N으로 나눈 값중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값최빈값 : N개의 수들 중 가장 많이 나타나는 값범위 : N개의 수들 중 최댓값과 최솟값의 차이N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.입력첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.출력첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올.. 2024. 11. 19.
백준 18110 ( 구현, 정렬, 소수점 처리) 문제solved.ac는 Sogang ICPC Team 학회원들의 알고리즘 공부에 도움을 주고자 만든 서비스이다. 지금은 서강대뿐만 아니라 수많은 사람들이 solved.ac의 도움을 받아 알고리즘 공부를 하고 있다. ICPC Team은 백준 온라인 저지에서 문제풀이를 연습하는데, 백준 온라인 저지의 문제들에는 난이도 표기가 없어서, 지금까지는 다양한 문제를 풀어 보고 싶더라도 난이도를 가늠하기 어려워 무슨 문제를 풀어야 할지 판단하기 곤란했기 때문에 solved.ac가 만들어졌다. solved.ac가 생긴 이후 전국에서 200명 이상의 기여자 분들께서 소중한 난이도 의견을 공유해 주셨고, 지금은 약 7,000문제에 난이도 표기가 붙게 되었다.어떤 문제의 난이도는 그 문제를 푼 사람들이 제출한 난이도 의견을.. 2024. 11. 18.