coding 연습 14

프로그래머스 level2 문제들(정답률 0%~40%)

- 혼자 놀기의 달인def solution(cards): # 사용되지 않은 남은숫자들 집합으로 관리한다. 반복문이 끝나는지 판단하기 위해 사용됨 remainNum = set([i+1 for i in range(len(cards))]) # 각 상자 그룹 길이 저장 boxGroupLen = [] while len(remainNum) > 0: # 상자 그룹을 구한다. idx = min(list(remainNum)) group = [] while True: # 자신을 상자 그룹에 추가후 남은숫자에서 제외 group.append(idx) remainNum.remove(idx) ..

프로그래머스 level2 문제들(정답률 50%~60%)

- 게임 맵 최단거리 처음에는 dfs로 풀어 시간초과가 되었지만, bfs로 푸니 빠르게 풀 수 있었다. def solution(maps): from collections import deque answer = -1 height = len(maps) width = len(maps[0]) queue = deque() queue.append((0, 0)) udlr = [[0,1],[0,-1],[-1,0],[1,0]] while len(queue) != 0: (y, x) = queue.popleft() # 상하좌우 for idx in range(4): nx = x + udlr[idx][1] ny = y + udlr[idx][0] if ny >= 0 and nx>=0 and ny 0: answer[stack.po..

프로그래머스 level 2 sql 문제들

- 동물 수 구하기 SELECT count(*) from ANIMAL_INS; - 최솟값 구하기 SELECT DATETIME from ANIMAL_INS order by DATETIME limit 1; - 동명 동물 수 찾기 SELECT NAME, count(*) as COUNT from ANIMAL_INS where NAME IS NOT NULL group by NAME having count(*) > 1 order by NAME; - 중복 제거하기 SELECT count(distinct NAME) from ANIMAL_INS where NAME is not null - 이름에 el이 들어가는 동물 찾기 SELECT ANIMAL_ID, NAME from ANIMAL_INS where ANIMAL_TYP..

프로그래머스 level1 문제들(정답률50%이하)

- 신규 아이디 추천 -처음에는 ord를 이용해 "2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다." 를 적용했지만, 정규표현식을 이용해 다시 프로그램을 짰다. 정규표현식 짱짱맨! -다른 분들의 풀이법을 보니 for문을 사용해 정규표현식을 사용하지 않고 re.sub메소드를 이용해 엄청 간결하게 하셨다! re.sub(pattern, repl, string, count=0, flags=0)는 해당 string에서 정규식pattern에 해당하는 부분이 있다면 repl로 바꿔서 반환한다! 이렇게 좋은 함수가 있을줄이야... import re def solution(new_id): # step 1 answer = new_id.lower() # s..

프로그래머스 level1 문제들(정답률50%~60%)

- [1차] 다트 게임 숫자가 한자리가 아닌것을 처리하는것. 특수문자에서 nums 길이가 1인것을 고려해야한다. def solution(dartResult): import re nums = [] before = '' #한자리 숫자가 아닌것을 처리 for x in dartResult: #숫자라면 nums에 저장 if re.match('[0-9]', x): if before == 'num': nums[len(nums)-1] = nums[len(nums)-1] * 10 + int(x) else: nums.append(int(x)) before = 'num' #S D T 라면 마지막 nums에 배수. elif re.match('[SDT]', x): before = 'pow' if x == 'D': nums[le..

프로그래머스 level1 문제들(정답률60%~70%)

- [1차] 비밀지도 숫자를 이진 문자열로 바꾸는 방법은 두가지가 있다. "{0:b}".format(37)과 같이 .format을 사용하는 것과 bin()내장함수를 사용하는 방법이 있다. https://stackoverflow.com/questions/699866/python-int-to-binary-string def solution(n, arr1, arr2): answer = [] for y in range(n): row1 = "{:b}".format(arr1[y]).rjust(n,"0") row2 = "{:b}".format(arr2[y]).rjust(n,"0") row = '' for x in range(n): if row1[x] == '0' and row2[x] == '0': row += ' '..

프로그래머스 level1 쉬운 문제들(정답률70%이상)

- 평균 구하기 def solution(arr): return sum(arr) / len(arr) - 약수의 합 n이 0일 때와 1일 때 예외 처리를 해주어야 한다. def solution(n): if n == 0: return 0 elif n == 1: return 1 answer = 1 + n for x in range(2, n): if n % x == 0: answer += x return answer - x만큼 간격이 있는 n개의 숫자 def solution(x, n): answer = [] if x == 0: answer = [0]*n else: answer = [x for x in range(x, x*(n+1), x)] return answer - 자릿수 더하기 def solution(n): ..

프로그래머스 level 1 sql 문제들

- 아픈 동물 찾기 SELECT ANIMAL_ID, NAME from ANIMAL_INS where INTAKE_CONDITION like 'Sick' order by ANIMAL_ID - 역순 정렬하기 SELECT NAME, DATETIME from ANIMAL_INS order by ANIMAL_ID desc - 상위 n개 레코드 select NAME from ANIMAL_INS where DATETIME = (SELECT MIN(DATETIME) from ANIMAL_INS) --또는 select NAME from ANIMAL_INS order by datetime limit 1 - 어린 동물 찾기 SELECT animal_id, name from animal_ins where intake_cond..

별 찍기 - 10 시간초과

꽤 어려운 문제였다. 처음에 감을 잡지 못해서 한참 헤맸다. 어떻게 재귀로 표현할지 감이 안잡혔다. *의 조건을 찾아서 화면에 print하려고 했더니 전혀 감잡지 못했었다. 하지만 다른 블로그를 찾아보고나니, *의 조건을 찾는것이 아닌, " "의 조건을 찾고있었다. 나도 " "의 조건을 찾고 보니 문제의 해결방법이 보이기 시작했다. " "의 조건은 n의 3등분의 가운데이면 이다. 그리고 나머지가 모두 *은 아니다. 해당 자리가 한변에 n/3길이의 정사각형에서 3등분의 가운데인지도 살펴봐야 한다. 이것을 n이 3일 때까지 반복하여 모두 " "자리가 아니었을 때만 *을 출력한다. import java.util.*; public class Main { public static void main(String[]..

소인수분해-시간초과

import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int primeNum = 2; while(true) { //n을 primeNum으로 나눌 수 있는가? 나눈다. n /=primeNum //아니다. 다음 primeNum을 찾고 반복. if(n%primeNum==0) { System.out.println(primeNum); n /= primeNum; if(n==1) break; //primeNum = 2; } else { primeNum = nextPrimeNum(primeNum); } } sc.close()..