반응형

전체 글 50

일본 고속버스 예약하기 with 버스비교내비 (バス比較なび)

글 순서 들어가기 전에 일본의 대중교통이 비싼 건 이미 유명한 이야기이다. 특히나 먼 거리를 이동하는 신칸센은 무려 항공권에 비할 정도로 금액이 상당한데, 이럴 때 버스를 이용하면 비용을 크게 절약할 수 있다. 특히 夜行バス (야간버스)를 이용하면 도쿄에서 오사카까지 10,000엔이 안되는 가격에 이동하는 등 상당히 돈을 절약할 수 있다. 이번 포스팅에서는 일본 고속버스, 시외버스, 야간버스의 가격을 비교해주는 서비스 "버스비교내비"를 소개하고, 여행자 입장에서 일본의 고속버스를 예약하는 방법까지 알아보겠다. 일본의 고속버스 고속버스의 가격비교는 웬말이냐? 일본의 버스는 전철 등과 마찬가지로 민영화가 상당히 이루어져 많은 운수회사가 영위하고 있다. 예약플랫폼도 제각각이고 비슷한 노선임에도 금액이나..

Japan 2025.03.11

가성비 노트북 해외직구 with eBay Refurbished 구매 가이드

글 순서 들어가기 전에 알뜰살뜰한 한국 프로직구러들이면 이베이에서 상품 목록에 위와 같은 "뱃지"를 본 적이 있을 것 같다. 이번 포스팅에서는 eBay Refurbished 상품에 대해서 소개하고, 어떤 메리트가 있는지, 어떤 식으로 구매해야 하는지 간단히 살펴보도록 하자.  Refurbished (리퍼비시)란?직역하자면 "재정비된" 등으로 표현할 수 있겠는데, 굳이 사족을 붙이지 않아도 애플의 "리퍼 서비스"를 시작으로 요즘에는 널리 알려지게 된 것 같다. 정확한 의미는 검수 및 수리를 거쳐 다시 판매되는 제품이다. 실사용 목적의 저렴한 제품을 원하는 소비자에게는 합리적인 선택이 될 수 있다. 이러한 리퍼비시 제품의 유입경로는 대체로 아래와 같다.반품된 제품 – 소비자가 구매 후 단순 변심이나 사소한 ..

Consumer Tech 2025.03.05

[Python 문제 풀이] 프로그래머스 "완전 범죄"

진짜 오랜만에 코딩테스트 풀어봤다. 이 문제는 누산해가는 전형적인 dp문제이다. 쉬울 줄 알았는데 감이 다 죽었는지, 어려워서 결국 딥시크한테 힌트 달라고 했다. 참고로 같은 문제를 ChatGPT는 풀지 못했다! 의사코드 1. info에 대해서 반복(2~4)2.     ckpt에 대해 반복3.         A와 B가 훔치는 두 경우의 수를 n_ckpt에 기록한다.4.     ckpt를 n_ckpt로 업데이트한다. 코드 def solution(info, n, m): ckpt = {0:0} for x, y in info: n_ckpt = {} for xx, yy in ckpt.items(): if xx + x yy: ..

[SQL 문제 풀이] 프로그래머스 "멸종위기 대장균 찾기"

WITH RECURSIVE CTE (GENERATION, ID) AS ( -- 초기조건 SELECT 1,ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL -- 아래부터 반복 결과가 없으면 종료 SELECT GENERATION + 1, e.ID FROM ECOLI_DATA e -- 자식이 하나도 없는 마지막 세대일 경우 결과가 없음 JOIN CTE c ON e.PARENT_ID = c.ID ) SELECT COUNT(*) AS COUNT, GENERATION FROM CTE WHERE ID NOT IN ( SELECT PARENT_ID FROM ECOLI_DATA WH..

[Chromebook 탐험] Android 폰 연동 Feat. ChromeOS Phone Hub

글 순서  들어가기 전에 Chromebook의 Phone Hub를 이용하면 Android 기반의 스마트폰을 연결해 두 기기를 더욱 잘 활용할 수 있다. 스마트폰에서 주고받던 메세지, 사진, 크롬 탭 등을 관리하고 스마트폰에서 구동되는 앱 화면을 스트리밍하여 원격조작할 수 있다. Windows의 Phone Link와 거의 비슷한 컨셉이다. Chromebook의 Phone Hub는, 공식 문서에 따르면 픽셀과 낫싱폰, 샤오미 등 일부 기기만이 완벽히 지원한다고 나와있다. 하지만 안드로이드 13 버전 이상이라면 연결이 될 것으로 보인다. 실제로 필자가 사용하는 기기 역시 공식문서에는 언급되어 있지 않지만 잘 연결되었다. 여러분도 시도해보시길 바란다. 스마트폰을 크롬북에 연결하기 (공식문서 번역)중요: 블루투스..

Consumer Tech 2024.09.22

[SQL 문제 풀이] 프로그래머스 "물고기 종류 별 대어 찾기"

ROWNUMBER()를 활용한 전형적인 트릭Programmers SQL 문제 풀이 Lv3물고기 종류별 대어 찾기조건파악FACT와 DIMENSION으로 분류된 전형적인 테이블 구조이다. 타겟 속성이 NULLABLE이다.접근그룹별로 최대값을 가진 행만 SELECT한다. 그룹 안에서 랭킹을 부여하면 된다. 이를 위해서는 ROWNUMBER()를 사용한다. 정렬 후 순서대로 ROWNUMBER를 부여하면 자연스럽게 랭킹을 구현할 수 있다. 특별히 이 경우, 그룹 내에서의 랭킹을 부여하기 위해 OVER()와 PARTITION을 사용한다. DESC로 정렬할 때 NULL을 뒤로 보내기 위해 IS NULL ASC의 정렬 조건을 추가한다.쿼리분석WITH J AS ( SELECT ID, FIS..

[SQL 문제 풀이] 프로그래머스 "언어별 개발자 분류하기"

비트 논리 연산을 알면 풀고 모르면 못 풂 프로그래머스 Lv.4 '언어별 개발자 분류하기' SQL 코드 및 풀이 조건파악 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다. 접근비트 논리 연산자 &를 이용해 두 수를 비교할 경우 일치하는 비트가 존재할 경우 True가 나온다. 이를 이용해 JOIN하자.구현WITH J AS ( SELECT ID, EMAIL, CASE -- 조건에 맞게 SCORE를 기록 WHEN COUNT(CASE WHEN C..

[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 2번 / 석유 시추"

공간적으로 생각해야 함 프로그래머스 Lv.2 '석유 시추' 파이썬 코드 및 풀이 조건파악1. 시추관이 지난 덩어리는 다 채굴됨2. 땅의 크기는 최대 500x500 -> 최소 연산 횟수 250,000이다.접근BFS로 각 덩어리의 크기를 구해야겠다. 그러고 나서 덩어리의 좌우 가장 끝에 있는 부분의 column 좌표를 기록하자. 이 범위에 시추관이 들어오면 그 때 덩어리의 크기를 더하면 된다. 면적이 크지 않아 중간에 이런 저런 연산이 추가되어도 넉넉하게 풀 수 있겠다.의사코드BFS로 각 덩어리의 크기를 구한다.BFS 로직 안에 덩어리의 좌우 양 끝의 column좌표를 기록하는 로직을 추가한다.덩어리 하나를 다 구하고 나면 땅의 column 수에 맞게 만들어 놓은 배열에다가 덩어리 좌우 좌표를 범위로 하는 ..

[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 4번 / 수레 움직이기"

조건을 꼼꼼히 잘 따져야 하는 짜증나는 문제 프로그래머스 Lv.3 '수레 움직이기' 파이썬 코드 및 풀이 조건파악1. 미로의 크기는 최대 4x4이므로 시간복잡도는 신경쓰지 않아도 OK2. 도착 전까지는 무조건 움직임3. 도착한 수레는 고정4. 미로 밖을 넘지 않을 것5. 벽이 아닐 것6. 각 수레는 자신이 지나온 경로를 다시 갈 수 없음7. 수레가 겹쳐있을 수 없음8. 서로 자리를 바꾸지 않을 것접근BFS를 이용해 풀면 되는데 두 개가 동시에 움직인다.의사코드1. 초기 위치를 찾음2. 큐에 대해 반복현재 상태를 꺼냄도착한 수레를 특정, 모두 도착하면 그 즉시 종료 및 이동횟수를 반환도착하지 않은 수레에 대해 조건에 맞는 경우의 수를 지나온 경로, 이동 횟수와 함께 큐에 넣음큐가 비면 0을 반환 구현fro..

Airflow에서 TaskFlow API(@task)와 PythonOperator가 아닌 Operator 같이 사용하기

Introduction 기존의 DAGs에서 작성되는 고전적인 방식에 대비되는 TaskFlow API 패러다임은 Airflow 2.0에서 소개되었다. 데이터 파이프라인에서 파이썬 함수에 @task 데코레이터를 붙이는 것으로 간단하게 task를 생성할 수 있다. 함수의 이름이 task의 유일한 식별자 역할을 한다. 그런데 PythonOperator가 아닌 다른 Operator를 사용하면서 @task 데코레이터를 쓰려면 어떻게 해야할까? QuickStart 간단하게 context를 파이썬 함수의 파라미터로 받고 이걸 내부에 있는 다른 operator에 넘겨주면 된다! 아래는 예시이다. @dag() def dag(): @task() def python_task(**context): bash_task = Bash..

반응형