Computer Science 136

[Python 3] BOJ 1366: 기타 코드

https://www.acmicpc.net/problem/1366 구현하기 굉장히 복잡한 문제였다. 조건들도 많고, 헷갈리거나 실수하기 쉬웠던 포인트들이 많았던 것 같다.우선적으로 제일 고민히 많이 되었던 포인트는 튜닝되어 있는 줄들을 코드로 만들기 위해서 각자 어떤 줄에 배치할지를 정하는 것이 고민이 많이 되었다.  itertools 라이브러리에 product라는 함수가 있다. 이를 통해 데카르트 곱을 구할 수 있었다.예시로 product('ABCD', repeat=2)를 이용하면, AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD와 같은 output을 얻을 수 있다. 1번 입력을 예시로 들어보자. E A D G B E라는 음정을 E G# B로 만들어야 한다. 그래서..

[Python 3] BOJ 31864 눈송이 탕후루 만들기

https://www.acmicpc.net/problem/31864오늘 해설할 문제는 눈송이 탕후루 만들기라는 문제이다.먼저, 문제를 보았을 때, 제일 먼저 든 생각은 30만개의 눈송이와 30만개의 끝점들을 모두 brute force로 연산하면, 최소 30만의 제곱, 즉 900억개의 연산을 해야될 것으로 예상이 되었다. 이는 무조건적으로 시간 초과가 날 것임이 당연했다.그래서, 먼저 시작점인 (0,0)과 눈송이 사이의 기울기를 통해, 기울기를 key로, 좌표의 x값을 value로 갖는 dictionary를 만들어서, 끝점을 보고 몇 개의 눈송이를 가지는지 확인할 때 (0,0)부터 끝점까지의 기울기와 같은 기울기를 가진 눈송이들만 확인하는 방식을 채택하였다.하지만, 또 다른 문제점들이 있었다.(3,4)와 ..

[Python 3] BOJ 20955 민서의 응급 수술

https://www.acmicpc.net/problem/20955해당 문제를 바라보면, 뉴런들로 뇌가 이루어져 있고, 뉴런들은 시냅스를 통하여 연결된다. 하지만 뉴런들끼리 연결이 끊어졌고, 끊어진 시냅스들을 다시 연결하여 모두 뉴런들을 연결하려고 한다. 하지만, 뉴런들을 트리 형태로 연결하려고자 한다. 즉, 뉴런들끼리의 사이클이 존재하지 않아야한다. 하지만 여기서 중요한 점은, "연결되지 않은 두 뉴런을 연결하거나, 이미 연결된 두 뉴런의 연결을 끊는다"이다. 이미 연결된 뉴런들, 즉 시냅스들을 사이클이 발생될 경우 끊어내야 한다.이번 문제는 분리 집합을 이용한 문제였다.분리 집합을 형성해서, 뉴런들끼리의 연결 관계들을 검토한다. 연결 관계의 두 노드가 이미 같은 부모 뉴런을 가지고 있는 경우, 이 연..

[Python 3] BOJ 30627 삼월 초하루

저번 2023 SPC에서 나왔던 문제인데, 당시에는 마땅한 풀이법을 찾지 못했었다.이후 한 해가 지나고 다시 문제를 풀어보았다.https://www.acmicpc.net/problem/30627우선적으로, BFS를 이용한 완전탐색을 이용하여 풀이하였다. 먼저 문제 상황을 어떻게 정의할 지 많은 고민을 하였는데,리스트를 이용하여[1번 물의 위치, 1번 물의 온도], [2번 물의 위치, 2번 물의 온도],[진행 로그]]와 같은 방식으로 저장하였다. 즉, 시작할 때 1번, 2번 숙우에 온도 100인 물이 있으므로,[[1,100],[2,100],[]]처럼 초기에 정의할 수 있는 것이다.처음에 풀 때는, 단순히 빈 숙우로 물을 옮기면 된다고 생각하였다.그러므로 물이 들어있는 숙우에서 물이 없는 숙우로 옮기고, 반..

[MySQL] 프로그래머스 : 자동차 대여 기록에서 장기/단기 대여 구분하기

기존에 있는 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서, 1. 2022년 9월 대여 기록 중2. 대여 기간이 30일 이상이면 '장기대여', 30일 미만이면 '단기 대여'로 만든 컬럼을 제작하고3. 날짜를 다음과 같은 형태로 출력하면서 4. HISTORY_ID를 기준으로 내림차순 정렬해야한다. 먼저 DATE_FORMAT 함수를 이용하여 우리가 원하는 XXXX-XX-XX형태의 날짜로 출력하였고,DATEDIFF 함수를 이용하여 날짜 간의 차이를 구했다.여기서 DATEDIFF 함수를 이용하면, 2022-09-01 와 2022-09-01이라는 날짜의 차를 0으로 출력한다.실제로는 하루를 빌린 거기 때문에, 1로 계산되어야 한다.즉, DATEDIFF 출력값 +1 >= 30 , DATED..

[MySQL] 프로그래머스: 과일로 만든 아이스크림 고르기

해당 문제에서는, 두 가지의 테이블이 있다. flavor에 대한 정보를 가지고 있는 FIRST_HALF, 그리고 FLAVOR마다 무엇으로 이루어져 있는지에 대해서 알려주는 ICECREAM_INFO 테이블이 있다.여기서 ICE_CREAM_INFO의 Flavor는 FIRST_HALF에서의 FLAVOR의 외래 키이므로, Left Join을 이용하여 a테이블 옆에 b테이블에 대한 정보를 연결할 수 있는 새로운 테이블을 만든다고 생각해보자. SELECT a.FLAVOR FROM FIRST_HALF AS aLEFT JOIN ICECREAM_INFO AS bON a.FLAVOR = b.FLAVORWHERE a.TOTAL_ORDER > 3000 AND b.INGREDIENT_TYPE LIKE 'fruit_based'O..

[Python 3] BOJ 30619: 내 집 마련하기

오늘 풀어볼 문제는 '내 집 마련하기' 이다.예전에 서강대학교 프로그래밍 대회에서 1번 문제로 나왔었던 문제인데, 조금 복잡했던 구현 문제이다. 우선적으로 조금 어려운 부분은, '문제를 정확하게 읽어야 된다'는 점이다.문제에 주어진 표현은 i번째 집에 A_i번 사람이 배정되어있다고 하는데, 즉 문제에 표현된 방식은 1번과 같은, 집 기준이다.하지만 문제에서 sorting 해야하는 것은 L번 사람부터 R번 사람, 즉 사람 기준이다.그렇기 때문에, 기준을 사람으로 변경해주어야 한다.먼저 이후 정렬을 통해서, 작은 집의 번호를 가진 사람이 작은 집에 살고, 큰 집의 번호를 가진 사람이 높은 번호의 집에 살아야 최적의 세금 감면 효과가 이루어지기 때문에, 오름차순으로 L번 사람부터 R번 사람의 집들을 정렬한다...

[자바 웹 개발 워크북] 3장: 세션 / 쿠키 / 필터 / 리스너

3.1 세션과 필터HTTP:무상태: 과거의 요청 기록을 알 수 없음.여러 개의 요청을 처리할 수 있다는 장점과거의 방문 기록을 추적할 수 없기에, 추가적인 기법을 요구함 -> 세션 트래킹쿠키: 문자열로 만들어진 데이터의 조각, 서버와 브라우저 사이에서 요청과 응답 시에 주고받음.기본적인 쿠키의 형태: 이름과 값.브라우저에서 최초로 서버를 호출하는 경우, 서버에서 발생한 쿠키가 없으면 브라우저는 전송하지 않음.서버에서 응답을 보낼 때 브라우저에게 쿠키를 보내주는데, Set-Cookie라는 HTTP 헤더를 이용함.브라우저는 쿠키를 받은 후, 정보를 읽고, 파일 형태로 보관하거나 메모리에서 처리할건지 결정함이때의 판단 기준은 쿠키의 유효기간 / 만료기간브라우저가 보관하는 쿠키는 다시 서버에 요청할 때 'Coo..

[Python 3] BOJ 25419 정수를 끝까지 외치자

https://www.acmicpc.net/problem/25419이번 문제는 Nim Game의 일종인 '정수를 끝까지 외치자' 문제를 풀어보았다.처음에 가졌던 생각은, '돌 게임 https://www.acmicpc.net/problem/9655' 문제와 술 게임인 '배스킨라빈스 31'과 유사하다는 생각을 했었다.모두 님 게임과 같은 메커니즘을 가진 문제이다.먼저, 학생 1이 우선권을 가져서 먼저 정수를 부를 수 있다.부를 수 있는 수는 1부터 K까지이다.이후 학생 2는 학생 1이 부른 숫자에 + 1 부터 +k까지의 정수를 불러야 한다.그리고, 마지막 정수를 부르는 학생이 승리하는 문제이다.문제에 조금 애매한 표현이 있는데, '두 학생이 규칙에 맞게 플레이했을 때'이다. 각 학생이 부를 수 있는 정수들..

[Python 3] BOJ 30205 전역 임무

https://www.acmicpc.net/problem/30205 [30205번: 전역 임무김 병장이 소속된 특수부대는 전역을 하려면 특이하게 대대장으로부터 주어진 임무를 달성해야 한다. 김 병장이 받은 임무는 적군의 $1$번 기지부터 $N$번 기지까지 모두 순서대로 격파하는 것이www.acmicpc.net](https://www.acmicpc.net/problem/30205)이번 문제는 그리디 알고리즘을 이용하여 풀었다.n,m,p=map(int,input().split())for i in range(n): data=list(map(int,input().split())) data.sort() minusone=data.count(-1) temp=minusone for j in ..