반응형

분류 전체보기 316

파이썬 : 웹 스크래퍼 만들기 (1)

웹 스크래퍼란? 요약하자면, 웹을 서핑해서 정보를 긁어오는 기능이다. 스크래퍼를 잘 작성해두면, 한번의 키워드로 여러 사이트의 정보들을 가져와서 가공할수있다. 사용할 기술: Python과 각종 라이브러리 간단하게 replit.com 사이트를 통해서 작성을 해볼것이다. 로그인을 한뒤 여기서 파이썬 프로젝트를 간단히 만들어보자. 라이브러리 BeautifulSoup를 사용하여 웹을 스크래핑할것이다. https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find Beautiful Soup Documentation — Beautiful Soup 4.9.0 documentation Non-pretty printing If you just want a string, wit..

[프로그래머스,Java] Level2: 이모티콘 할인행사

문제분석 처음 문제를 접할때 복잡한 문제지만, 기본 로직을 잡고 천천히 풀다보면 쉽게 풀린다. 요점은, 전략을 잘짜는것이다. 제한사항이다. 이모티콘의 할인율은 10 , 20 , 30, 40프로 4가지로 정해져있고, 이모티콘은 총 7개 제한이다. 유저는 100명이다. 완전탐색으로 구한다면 100*4^7 효율성이 예상된다. 완전탐색으로 풀기로 하였다. 완전탐색의 기준은 이모티콘이 할인되는 경우의수다. 각각의 이모티콘이 10% ,20%, 30% ,40% 할인되는 분기를 모두 탐색할것이다. 최종적으로, sign으로 최대 회원수와 earn으로 최대 수익을 반환할것이다. arr는 이모티콘들이 할인되는 퍼센트를 저장할 예정 이다. comb() 메소드로 이모티콘할인되는 분기를 모두 탐색이 시작된다. 완전탐색 분기가 은..

[프로그래머스,Java] Level2: 택배 배달과 수거하기

문제분석: 카카오 문제 Level2다. 다른 레벨 2와 비교해보면 격이다른 난이도를 돋보인다. 문제 요건: 트럭이 최소거리로 배달과 수거를 완료하는 거리를 구해주세요. 일단 어떻게 접근을 할까부터 생각해봤다. 곰곰히 규칙과 사례를 보니, 제일 먼 거리부터 배달과 수거행위를 한다. 이거에 착안해서 로직을 시작했다. d는 배달을 하러갈 지점, p는 픽업을 하러갈 지점이다. 최초로 배달하러갈 지점과 픽업하러갈 지점을 구하고 간다. 반드시, 마지막집에 물건이 있을 보장이없기때문이다. 이제부터 조금 긴 while문이 시작된다. 종료조건과 거리계산을 설정했다. 종료조건은 배달과 픽업이 모두 완료댈때, 거리계산은 배달지점과 픽업지점중 높은값을 기준 *2한다. 그 이유는, 픽업이 높으면 픽업까지 배달이 높으면 배달까지..

[프로그래머스, Java] Level1: 개인정보 수집 유효기간

문제분석: 카카오 2023년 블라인드 채용때 나온 문제다. 카카오 문제는 기본적으로 어렵기때문에 이 문제도 1.5단계라고 생각하면된다. 요점: 만료된 계약 찾기 우선, 약관마다 기간이 다르기때문에, 약관을 다른 공간에 저장해두고 사용해야한다. 매번, 개인정보를 확인할때마다 약관리스트를 찾는건 효율성이 매우 떨어지기때문이다. 약관을 저장할 map을 생성하고, map 에다 약관의 종류와 기간을 입력한다. 이제부터 개인정보에 적용할 약관을 찾는데 O(1)이 걸릴것이다. 이젠 개인정보마다 만료됨의 여부를 체크할것이다. 여부는 isExpire() 메소드를 통해 진행할것이다. privacy를 "." 으로 분해를 한뒤, 정보를 각각 빼옵니다. 약관에따라 월 단위를 증가 시킵니다. 이 과정에서 월이 12월을 넘어갈수 ..

[프로그래머스 ,Java] Level2: 유사 칸토어 비트열

문제분석 나에겐 어렵다.. Level3? 3.5 정도 문제 아닌가..? 문제 이해부터 조금 난해한데, 요약하자면 1을 11011 , 0을 00000으로 치환하여 n만큼 반복시킨다. 그렇게 반복시킨 문자열에서 스타트 l에서 끝지점 r까지 1의 갯수를 세주면 된다. First Try: 처음엔 그냥 쉽네 하고 하라는데로 진행을했다. n만큼 1과 0을 치환한뒤, 그 문자열을 가져와서 스타트 l에서 끝지점 r까지 갯수를 세준것이다. -> 당연히 효율성에러 Level2 에서 효율성 에러를 본게 참 오랜만이다. n이 20까지 가기때문에 5^20 까지간다. int 범위를 넘어갈정도니, 당연히 안된다. Secont Try: **점화식, 재귀 작성하기 ** 첫번째 접근이 안된다면, 값을 추적해야한다. 작전 : 0~ 끝 지..

[프로그래머스, Java] Level2: 마법의 엘리베이터

문제분석 목표: 1 ,10 ,100, 1000 ... 같은 오르내리락 할수있는 버튼을 사용하여, 최소값으로 0층가기 문제를 이해하셧다면, 각 자릿수마다 엘리베이터를 올릴지, 내릴지를 판단해야합니다. 올리면 무조건 이득보는 숫자는 6,7,8,9 이며, 내리면 무조건 이득보는 숫자는 0,1,2,3,4 입니다. 문제는 숫자 5입니다. 숫자 5일때 경우에따라서 올리는게 더 좋을때도잇고, 내릴때 더 좋을때가있습니다. EX) 45 : 45인경우는 첫째자리 5를 내리는게 더 빨리 도착합니다 = 9 5555: 첫째자리 5를 올리는게 더 빨리 도착합니다 = 18 5555> 5560->5600->6000->10000->0 : 5+4+4+4+1=18 55: 55인 경우는 첫째자리를 올리든, 내리든 값이 똑같습니다 =10 5..

[프로그래머스,Java] Level3: 억억단을 외우자

문제분석 오랜만에 레벨 3 문제를 풀어보았다. 문제를 요약해보자면 1.적당한수 e 가 주어지고, e보다 작은 여러개의 start지점이 주어집니다. 2.서로다른 start지점에서 e부터 최대 출몰하는 숫자를 입력합니다. 3. 최대 출몰하는 숫자가 여러개라면 작은숫자를 우선 First Try: 1.먼저, 최대 출몰하는 숫자를 알려면, 그 숫자가 몇번 출몰하려는지 알아야 합니다. 억억단에서 그 숫자가 출몰하는횟수는 약수의 갯수 라는걸 알았고, 약수의 갯수를구합니다. 2.약수의 갯수를 구하여 약수 배열에 저장합니다. 매번 그 약수를 다시 구하는건 비효율적이니 dp 방식처럼 배열에 저장을 해놓았습니다. 약수의 갯수를 구하는 로직이 여러개 있지만, 해당문제는 여러개의 약수를 동시에 구해야하기때문에 다음 로직을 사용..

정규표현식(REGEX) 문법 정리

정규표현식이란? 정규 표현식 또는 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 즉, 단 한줄로 내가 원하는 문자열 패턴을 제작하여 찾는 식이다. 이 정규표현식을 진짜 잘 사용하면, 단 한줄로, 무궁무진한 패턴을 만들수 있다. Java에서 정규표현식의 사용처 대표적인 메소드는 replaceAll() , matches() 이다. replaceAll()은 해당 패턴을 치환해주는 메소드, matches()는 해당 패턴이 일치하는지 확인하는 메소드다. 정규표현식의 문법 ^ 문자열의 시작 $ 문자열의 끝 . 임의의 한 문자 * 문자가 0번 이상 발생 + 문자가 1번 이상 발생 ? 문자가 0번 혹은 1번 발생 [ ] 문자의 집합 범위를 나타냄 [0-9] : 숫자 (0부터 9) [..

자바 2022.12.24

[프로그래머스 ,Java] Level2: 테이블 해시 함수

문제분석 테이블 해시 함수 로직을 구현하는 문제이다. 다르게 생각할필요는없다. 문제에서 하라는대로만 하면 끝이다. 이 문제를 들고온 이유는 새롭게 배운 두가지 테크닉을 작성하는겸 소개해드리고싶어서다. 먼저, 2번부터 로직을 시행할것이다. 2번의 요건은 col번째 요소로 정렬을하고, 동일하면 기본키(첫번째)로 정렬하는 문제다. 즉, 이중 정렬을 원하신다. 보통, 필자는 이중정렬을 거의 Comparator을 구현해서 표현했다. 이렇게다. 왜냐하면, 이중정렬을 람다식으로 불가능한거 아닌가? 싶엇다. 하지만, 웬걸 이중정렬도 람다식이 된다. 이걸 이제알았다니 .. 삼항 연산자로 가능하다. 3번과 4번을 동시에 처리하겠다. 각 컬럼을 mod idx하고 나온 값들을 XOR 한 최종값을 출력하는것이다. 자바에선 XO..

jQuery 사용하기(5) [애니메이션]

이번에는 JQuery에서 사용하는 애니메이션쪽의 일부분을 가져왔다. 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 span { color:red; cursor:pointer; } div { margin:3px; width:80px; height:80px; } div { background:#f00; } target $('input[type="button"]').click( function(e) { var $this = $(e.target); switch(..

자바스크립트 2022.12.20
반응형