반응형

분류 전체보기 316

[프로그래머스,MYSQL] Level2:동명 동물 수 찾기

동물 이름중 2번 이상 쓰인 이름과 이름이 쓰인횟수를 조회하는 문제다. 동물 이름: 이건 테이블 이름으로 쓰인다. 2번이상 쓰인~ : 이건 조건으로 쓰인다. 이름: Select 문으로 쓰인다. 이름이 쓰인횟수: 이것도역시 Select 문으로 쓰인다. 횟수를 반환하는거니 count()함수를 써야한다. ------------------------------------------------------------------------ 동물이름중 2번이상 쓰인걸 확인하려면, 그룹화를 하여야한다. 따라서, group by NAME 을 하셔야한다. 하지만 2번이상 쓰인걸 조건으로 사용해야하는데, 그룹화 안에서 조건문을 쓸려면 Where문이 아닌, having 을 써야한다. 따라서, having count(Name)>..

알고리즘/MYSQL 2021.11.23

[프로그래머스, Java] Level2:조이스틱

문제분석 조이스틱을 움직여서, 목표단어를 만드는데 움직이는 최소 횟수를 구하는 문제입니다. 이 문제를 풀기위해선 2개의 기능을 구현하셔야합니다. 1. 조이스틱을 위, 아래로 움직여서 문자를 바꾸고 횟수를 반환하는 메소드 2. 조이스틱을 오른쪽,왼쪽중 가장 짧은길을 골라 이동하는 횟수를 반환하는 기능 1번+2번을 하시면 우리가 원하는 답이 나올겁니다. 초기 문자열은 문자열 길이만큼 A가 부여되고시작됩니다. 1번을 구현하기위해선 Min('문자'-'A' ,26-'문자'-'A') 하셔도됩니다. (26은 모든 영어문자갯수) 또는, 영어문자의 중간부분의 문자 'M'을 기준으로 연산을해도됩니다. 어찌댓든, 해당 문자를 만드는 최소한의 이동을 반환하면 됩니다. 2번을 구현하기위해선, 중 어느쪽이 최소거리로 이동하는지를..

[프로그래머스,Java] Level2:소수 찾기

문제분석 조금 정직한 문제다. 1. numbers의 카드들이 존재하는데, numbers의 카드들을 재배열시켜서 만들수있는 숫자를 만든다. 2.만들어진 숫자들이 소수인지 확인한다. 3.소수의 갯수를 센다. 1. 순열 알고리즘으로 모든 숫자를 재배열시킨다. ->순열알고리즘은 구글링하면 나오지만, 돌아가는 로직은 알아두는게좋다. ->재배열한 숫자를 저장하는 리스트 하나 생성 1-2. 모든 경우의수를 정제한다. EX) 00045, 001, 024 같은 숫자들은 45, 1,24 로 변환시켜야한다. String -> Integer 변환 EX) 소수는 2부터 시작하므로, 0,1인 숫자는 제거한다. 2.소수를 판별하는 알고리즘을 사용한다. (에라토네스의체) ->구글링하면 나온다. 3.소수 의갯수세기. 문제풀이 1 2 ..

파이썬 머신러닝 :회귀모형

본격적으로 머신러닝을 사용해볼것이다. 머신러닝시스템은 크게 2가지로 나뉜다. 지도학습 VS 비지도학습 지도학습 : 특성(Feature) 과 레이블(label)을 가지면서 머신러닝을 하는방식이다. 비지도학습: 훈련데이터에 특성들만 있는 레이블이없는 형태로 머신러닝하는방식. 지도학습의 학습형태는 또 2가지로나뉩니다. 분류 VS 회귀 지도학습중에서 회귀를 먼저 다뤄볼것인데요. 회귀(Regression)는 수치형데이터를 머신러닝할때 사용합니다. 수치형 데이터란? 사람들의 몸무게, 키, 나이 , 혈압처럼 0~N만큼 수치를 가지는 데이터입니다. 분류는(Classification) 범주형 데이터를 머신러닝할때 사용합니다. 범주형 데이터란? 사람들의 혈액형, 성별 또는 꽃의 종류 와같이 뚜렷하게 분류할수있는 데이터입니..

[프로그래머스,Java] Level2:가장 큰 수

문제분석 목표: 주어진 수를 조합하여 가장 큰 수를 반환하면된다. 보통, 문제설명처럼 순열 알고리즘을 통해, 모든조합을 찾은뒤에 가장큰수를 찾는법도 존재는한다. 하지만, 제한사항을 보면 numbers의 길이가 최대 10만이다. 10만개의 숫자를 모든조합을 돌리면 연산수가 아득하게 높다.. 무조건 시간초과다 그러면 순열을 안쓰고 효율적으로 확인하는방법을 찾아야한다. 문제를 들어오기전에 힌트로 '정렬' 키워드를 주워졋다. 보아하니, 정렬을 이용해서 푸는문제인거같으니, 정렬로 통해 접근해보자. 정렬은, 두개의 원소를 비교하면서 자리를결정한다. 그렇다면, 6 10 이주어지면 어떻게 가장큰수로 변환할까.. 문자열로 6+10 과 10+6 으로 비교하면된다! 610과 106을 비교한다. 610이더크니, 6, 10으로..

안드로이드 쓰레드(Thread2) Handler 사용

저번에 멀티쓰레드를 사용해서, CalledFromWrongTrheadException이 발생했다. 이 오류는 서브 쓰레드가, 메인쓰레드의 UI를 조작하려들기때문에 발생하는오류다. 이번포스팅은 이 오류를 고쳐보겠다. UI를 조작하려드는걸 막기위해서는 조작은 메인이하게 남겨두고, 서브쓰레드에선 조작할 값만 넘겨받으면된다. 이 기능을 용이하게 해주는것이 Thread 간 통신 방법 • Handler • AsyncTask • Deprecated in API level 30 (version R) • Customized Handler • RxJava (자바) • Coroutines (코틀린) 방법들이있다. 이중에서 제일 기본적인 Handler를 사용해 보겠습니다. Handler가 돌아가는 형태다. 메인쓰레드: Han..

[프로그래머스,Java] Level2: 프린터

문제분석 우선순위를 담은 배열과, 요청한문서의 위치가 입력값으로 주워집니다. 목표: 규칙에따라 인쇄작업을합니다. 그후, 요청한 문서가 몇번째로 출력이되는지 구해주세요. 규칙: 1. 대기순서대로 인쇄를합니다. 2.만약, 남은 대기열중에 우선순위가 더높은문서가 있으면, 맨뒤로 보냅니다. 꽤나, 로직은 간단합니다. 문제힌트가 스택/큐를 사용하라고하니, 사용해봅시다. 대기목록이 최대 100개가있으니, n^2으로 풀어도 괜찮을것같습니다. 대기순서대로 인쇄를해야하니, FIFO인 큐를 쓰고싶어집니다. Queue = new LinkedList() 하지만, 저는 남은 대기열중에 우선순위가 더높은 문서를 찾기위해, get()메소드를 쓰고싶습니다. 그런데 LinkedList를 Queue 인터페이스로 업캐스팅을 해버려서 못씁..

[프로그래머스,자바] Level2: 전화번호 목록 (2021년 업데이트)

문제분석 작년에 쉽게 풀었던 문제가 2021년 3월 4일 업데이트 되었습니다. 문제는 정말 간단합니다. 전화번호가 다른전화번호의 접두어가 되면 false, 아니면 True입니다. 이제보니, 작년에 그냥 해시를 안쓰고 2중반복문을 써서 풀었더라구요. 이번에 업데이트된 테스트케이스로 다시 실행해보니, 효율성이 막힙니다. 하긴.. 해시를 안쓰고 해시문제라고 못하지 일단, 무조건 n^2 을 시도하시면 통과못합니다. 그러면, 어떻게든 줄여봐야죠. 해시를 쓰라고했으니, 해시를 사용해봅시다. Hash를 갖고있는 자료구조가, HashSet, HashMap이 대표적인데, 둘 중 아무거나 써도 됩니다. 실제로 연산속도가 둘이 비슷하더라고요. 필자는 HashSet,HashMap 둘다 사용해봤습니다. 우선, 풀이법부터 공유하..

[프로그래머스,자바] Level2: 괄호 회전하기

문제분석 여러가지 괄호가 섞인 문자열을 입력값으로주어집니다. 이 괄호를 문자열의 길이만큼 회전시키고, 회전시킨값이 '올바른 괄호 문자열'이라면, 결과값을 1 늘려주는 문제다. ----------------------------------------------------------------------------------------- 우선, 문자열을 회전시키는 로직을 구현해야한다. 필자는, 문자열의 맨 첫번째 문자를 기억해두고, 문자열을 idx 1부터 자른뒤 문자를 붙였다. 문자열 회전시키는 로직을 구현했다면, 회전시킨 문자가 올바른 괄호 문자열인지 확인해야한다. 이 올바른 괄호 문자열을 판별하는건 여러방법이 있겠지만, Stack을 사용해서 구현하는게 제일 깔끔하다. 괄호가 3종류가 존재하니, {} , ..

반응형