no image
[BS4] select()와 find()의 차이점
select() CSS 선택자를 활용해서 HTML 태그를 찾는 방식 더 다양한 조건을 활용해 직관적으로 찾을 수 있음 titles = soup.select("div.cont_thumb > p.txt_thumb") for title in titles: if title is not None: print(title.text) find() HTML 태그를 직접 찾는 방식 cont_thumb = soup.find_all("div", "cont_thumb") for cont in cont_thumb: title = cont.find("p", "txt_thumb") if title is not None: print(title.text) 참고 BeautifulSoup 모듈 find와 select의 차이점 - 복잡한 웹..
2023.02.21
no image
[Python] 프로그래머스 방문 길이 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 "출발 - 도착", "도착 - 출발" 모두 목적지와 시작점은 다르지만, 같은 길을 지난다. 이 점을 이용해서, 매번 방문 시 마다 "출발 - 도착", "도착 - 출발" 정보를 저장하는 방식을 통해, 처음 걸어본 길의 길이를 파악했다. 다루기 쉽게 시작점을 (5, 5)라고 생각하고 코드를 작성했다. # 이동 처리 def move(d, x, y): if d == "U": if x - 1 >= 0: x -= 1 elif d == "D": if x + 1
2023.02.21
no image
[Python] 프로그래머스 땅따먹기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 모든 경우의 수를 완전 탐색할 경우, 대략 $4^{100,000}$ 정도의 연산이 필요해 시간 초과가 발생한다. 따라서 다른 방법을 활용해야하고, 나는 DP를 활용했다. 매번 새로운 열만 밟을 수 있기 때문에, 현재 K 번째 열을 밟았다면, 이전엔 [K - 1, K - 2, K - 3]의 열만 밟을 수 있다. 결국 N 행의 K 번째 열을 밟았을 때의, 최대 값을 DP 테이블에 저장하면 문제를 풀 수 있다. DP[n][k] = land[n][k] + max(DP[n - 1][k - 1] +..
2023.02.21
no image
[OS] 운영체제의 정의와 기능 알아보기
운영체제란? 사용자(다른 소프트웨어)와 하드웨어 사이를 연결하는 역할을 하는 소프트웨어이다. 운영체제는 커널과 시스템 프로그램으로 구성된다. 운영체제를 커널과 시스템 프로그램으로 구분한 것은 메모리를 효율적으로 관리하기 위함이다. 운영체제도 결국 소프트웨어 이기 때문에, 메모리를 효율적으로 사용하는 것이 중요하다. 이를 위해서 운영체제 중 가장 중요한 일부의 부분(기능)만 항상 메모리에 적재해 두고 이를 커널(Kernel)이라고 부른다. 반대로 필요에 따라 그때마다 활용되는 기능들은 시스템 프로그램(System Program)이라고 한다. 운영체제의 기능 운영체제는 사용자와 하드웨어 사이를 효율적이고, 편리하게 연결 시키기 위해 다양한 기능을 제공한다. 기능을 통해 사용자가 원하는 작업을 간단하게 할 수..
2023.02.20
no image
[Python] 프로그래머스 스킬트리 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 스킬 트리만 만족하면 되기 때문에, 관련 없는 다른 스킬들은 확인하지 않아도 된다. 스킬 트리에 포함되는 스킬만 추출해서, 스킬을 찍은 순서를 확인하고 이것이 스킬 트리와 동일한 지 확인하면 된다. # 선행 스킬? 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬 # 중복이 없으니까, 필요없는 문자열 제거하면 될듯! import re def solution(skill, skill_trees): # 가능한 스킬 트리 개수 cnt = 0 # 확인할 스킬 정보 : 스킬 트리만 만족하면 되기 때문..
2023.02.20
no image
[Python] 프로그래머스 할인 행사 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 10일 동안의 할인 품목이, 원하는 품목과 동일할 경우에만 멤버십에 가입한다. 할인 품목의 개수 정보를 얻기 위해서 Counter를 사용했다. # 10일 동안 회원 자격 # 회원 : 하루 1 개만 # 10일 연속 일치할 경우에 가입 ! from collections import Counter def solution(want, number, discount): best_day = 0 want_number = dict(zip(want, number)) # 언제 가입하면 좋을 지 확인 for ..
2023.02.20
no image
[Python] 프로그래머스 오픈채팅방 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 마지막에 설정한 이름에 따라 기존 메시지는 전부 바뀌게 된다. 반복문을 통해 uid와 마지막 이름 사이 Hash를 구성하고, 이후 f-string을 통해서 출력했다. $2 * O(N)$ 정도의 시간 복잡도를 가지기 때문에, 시간 초과 없이 처리할 수 있다. # 입장 : 닉네임이 들어옴 -> 퇴장 : 닉네임님이 나감 # 닉네임 변경 방법 : 채팅방 나간 후, 새로운 닉네임으로 다시 들어감 / 채팅방에서 닉네임 변경 # 변경 -> 기존 출력 메시지 닉넴도 변경 # 유저 구분 -> uid 활용..
2023.02.19
no image
[OS] Burst(버스트)와 Bound(바운드) 알아보기
Burst(버스트) 버스트는 '한 작업을 연속적으로 처리하는 것'으로, 보통 작업 처리에 필요한 시간을 의미한다. 따라서 CPU(I/O) 버스트는 각각 CPU 명령 수행과 I/O(입출력 요청) 처리까지 걸리는 시간이라고 이해하면 된다. 프로그램은 CPU 버스트와 I/O 버스트가 번갈아가며 반복되는 방식으로 실행된다. I/O 버스트의 특징 I/O 버스트의 경우, 기본적으로 장치의 속도가 느리고, 추가로 커널 요청 작업까지 필요하기 때문에, CPU 버스트에 비해 상대적으로 긴 시간이 소요 된다는 특징이 있다. 실제로 I/O는 아래와 같은 복잡한 Cycle로 처리된다. CPU 버스트의 양상 CPU 버스트는 주로 CPU가 실행이 많이 필요한 작업을 수행할 때나, I/O 처리를 요청할 때 수행된다. I/O 요청 ..
2023.02.17
no image
[Python] 프로그래머스 주차 요금 계산 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 들어온 차는 나가지 않으면 23 : 59에 나간 것으로 가정한다. 이 경우 들어오고, 나간 시간의 차이를 구하는 것은 23:59 분과 현재 시각 사이 차를 구하는 것과 동일해진다. OUT과 IN을 서로 다른 기호를 가지도록 더해주면 결국 주차장에 머무른 총 시간을 구할 수 있다. # 차량별 주차 요금 계산 # 00:00 ~ 23:59 까지 누적으로 처리 -> 요금 일괄 정산 # 다음날 출차는 고려 X # 요금 계산 시 '올림' 처리 # 차량 번호가 작은 자동차부터, 차례대로 return!..
2023.02.17
no image
[Python] 프로그래머스 [3차] n 진수 게임 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 숫자들을 미리 N 진법으로 변환한 뒤, 대답 여부는 1 글자 씩 읽어서 확인했다. 튜브가 대답할 순서는 나머지를 통해서 확인했다. # 10 이상 부터는, 한 자리씩 말하기! # 자신이 말해야할 번호만 출력하면 됨 # n 진법으로 변환하기 def get_nbase(n: int, i: int) -> str: nbase = "" over_10 = {10 : "A", 11 : "B", 12 : "C", 13 : "D", 14 : "E", 15 : "F"} while i: q, r = divmod..
2023.02.17
no image
[Python] 프로그래머스 더 맵게 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 가장 덜 매운 두 음식을 고르기 위한 방법으로 우선, 정렬을 생각해볼 수 있다. 하지만 K는 10억이라 정렬의 횟수가 많아지기 때문에 시간 초과가 발생할 것이다. 따라서 항상 최소값을 보장할 수 있는, 최소 힙 자료구조를 활용한다. 최소 힙을 이용할 경우, 각 push와 pop은 $\log N$의 시간 복잡도를 가지게 된다. # K가 10억 -> 반복 횟수가 매우 큼 # 100 만의 길이를 계속 정렬한다면 시간 초과가 발생! from heapq import heappush, heappop..
2023.02.16
no image
웹크롤링에 필요한 HTML, CSS 정보
HTML이란? 웹 페이지의 구조를 나타내기 위한 언어 태그로 구성돼 있음 태그 태그는 시작 태그와 종료 태그로 구성 내용 과 같은 형식 태그엔 추가적으로 속성(Attributes)이 있을 수 있음 내용과 같은 형식 자주 사용되는 태그와 그 역할 태그명 역할 div 구역 나누기 a 링크 h1(h2, h3…) 제목 p 문단 ul, li 목록 태그는 부모 태그와 자식 태그로 구성할 수 있음 아래 코드에선 의 자식 태그가 바로 속성 태그의 별명 : 크롤링 대상의 이름 id : 하나의 태그에만 적용 됨 class : 여러 태그에 적용될 수 있음 태그의 스타일 style : CSS의 속성들을 HTML에서 직접 지정할 때 활용 CSS란? 웹사이트의 디자인을 표시하기 위한 언어 글자 색 변경, 폰트 크기, 가로 세로 ..
2023.02.16