Algorithm 29

[programmers lv.1 python] 완주하지 못한 선수 풀이 (with 시간초과 해결)

문제https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr코딩테스트 공부를 다시 시작했당쉬운 문제지만 해결해 나갔던 과정을 기억해두고 싶어서 포스팅한다문제 자체는 쉽다! 참가자 목록이랑 완주자 목록이 주어지는데 완주 못한 단 한 사람을 찾으면 됨 1차 코드 ➡️ 시간초과 실패def solution(participant, completion): for c in completion: if c in participant: participant.remove(c) retur..

[programmers lv.3] '조건에 맞는 사용자 정보 조회하기' MySQL 2가지 풀이 방법 및 성능 비교

📌문제https://school.programmers.co.kr/learn/courses/30/lessons/164670 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr말 그대로 조건에 맞는 사용자 정보를 조회하는 쿼리를 짜면 된다.그러나 조회 포맷팅 조건이 다소 까다로웠음 중고거래 플랫폼의 사용자 중에서 중고 거래 게시물을 3건 이상 등록한 사용자만 추려, 유저 ID, 닉네임, 전체 주소, 전화번호를 조회하라는 문제이때, 전체 주소는 CITY, STREET_ADDRESS1, STREET_ADDRESS2을 공백으로 이어붙이고, 전화번호는 01012345678 형식을 010-1234-5678로 변환해야 한다. ..

[programmers lv.4] '보호소에서 중성화한 동물' MySQL 풀이

문제https://school.programmers.co.kr/learn/courses/30/lessons/59045 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블이 주어지고, 여기서 보호소에 들어왔을 땐 중성화 되지 않았지만 나갈 땐 중성화 된 동물들의 아이디와 타입, 이름을 아이디 순으로 오름차순 정렬해서 조회하면 되는 문제였음 1차 풀이 ➡️실패SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAMEFROM ANIMAL_INS IJOIN ( SELECT ANIMAL_ID FROM ANIMAL_OUTS WHE..

[boj 2109.python] 백준 '순회강연' 풀이 (파이썬 런타임에러(ValueError) 해결)

https://www.acmicpc.net/problem/2109문제 접근처음에 'd일 안에 와서 강연을 해 주면' 이 문장 때문에 문제 이해에 약간 시간을 썼다. 나와 비슷한 처지(?)에 있으신 분들에게 이해가 쉽도록 예시를 들어드리자면 .. 3개의 대학에서 아래와 같은 조건으로 강연 요청을 해 온 상황이라고 가정 해보자.  최대로 많은 금액의 강연료를 벌 수 있도록 강연 일정을 최적화할 수 있게 그리디 알고리즘으로 접근했다. 주요 로직은 아래와 같다. 1. 강연료가 비싼 순서대로 (p가 큰 순서대로) 정렬한다. 가장 높은 보상을 우선으로 배정하기 위함이다.2. 위에서 정렬한 것을 기반으로, 가장 큰 강연료를 주는 요청부터 가능한 날짜(d)에 배정한다.3. 배정 기준은, 날짜를 거꾸로 탐색해서 가장 가..

Algorithm/BaekJoon 2024.12.20

[boj 2164.python] '카드2' 풀이 (시간초과 해결)

https://www.acmicpc.net/problem/2164접근 방식처음에 문제 읽자 마자, 쉬운 구현 문제라고 생각하고 냅다 단순 리스트로 풀어버렸다. 1차 코드 (리스트 사용) 👉 실패 ❌N = int(input())# 카드 리스트 생성card = [i + 1 for i in range(N)]# 카드 섞기def card_mix(): while len(card) > 1: # 카드가 한 장 남을 때까지 반복 # 제일 위에 있는 카드 바닥에 버림 card.pop(0) # 그 다음 위에 있는 카드는 제일 아래에 있는 카드 밑으로 옮김 card.append(card[0]) card.pop(0) print(card[0])card..

Algorithm/BaekJoon 2024.12.18

[programmers lv.2 python] '석유 시추' 파이썬 풀이 (이제 시간초과를 곁들인 ..)

https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 제한 사항문제 접근 bfs를 통해 석유가 있는 땅인 land[i][j]가 1인 부분을 찾으면, 그 주변의 기름 양을 상하좌우로 탐색해 1로 이어져있는 칸의 개수를 전부 찾아 count에 저장하는 방법으로 접근해봤다. 1차 코드 👉 실패 ❌from collections import dequedef solution(land): n = len(land) m = len(land[0]) visited = [[False] * m f..

[boj 14888.python] '연산자 끼워넣기' 파이썬 풀이 (feat. 브루트포스, DFS 비교)

https://www.acmicpc.net/problem/14888문제 출력 문제 접근문제 난이도 자체는 어렵지 않은 문제였다.처음에는 브루트포스(완탐)와 DFS 사이에서 고민하다가, DFS로 구현하려면 각 연산자를 선택하는 과정을 재귀 호출로 구현해야 할 것 같았다. 아직 그 부분은 미흡해서 브루트포스로 풀 수 있을까? 하고 고민했는데 ,, 그래서 시간 복잡도를 계산해 봤다. N - 1개의 연산자에 대해 가능한 모든 순열을 생성해야 하니까, 경우의 수는 (N - 1)!과 같을거다. '입력'에서 N의 조건을 보면 N의 최대값은 11 이다. 즉, 최대 경우의 수는 10! = 3,628,800이라는 말 ! 그래서 이 문제의 경우는 브루트포스로도 충분히 풀 수 있을 거라고 판단해 브루트포스 방법을 채택해서 문..

Algorithm/BaekJoon 2024.12.03

[TIL][자료구조] 그래프의 개념과 표현 방법

DFS와 BFS를 학습하다가, 이 알고리즘들을 배우기 전에 이 알고리즘들의 근간을 이루고 있는 '그래프'라는 자료 구조에 대해 깊게 알아보고 가야겠다는 생각이 들었다. ✏️그래프란?그래프란, 연결되어 있는 정점과 정점간의 관계를 표현할 수 있는 자료구조이다. [천재학습백과] 알다시피 자료구조는 크게 비선형구조와 선형구조로 구분되는데,선형구조는 자료를 저장하고 꺼내는 것에 초점이 맞춰져 있고 (ex. 스택, 큐, 리스트, ...), 비선형구조는 '표현'에 초점이 맞춰져 있다고 생각하면 된다. 자료구조인 그래프는 바로 연결 관계에 초점이 맞춰져 있는데, 말로만 들으면 너무 추상적이게 느껴질 수 있으니 관계망을 나타내는 서비스인 페이스북으로 예시를 들어보자. 필자가 친구 "제니"를 알고 있고, "로제"와 친하..

Algorithm 2024.12.02