전체 글 65

[파이썬] 프로그래머스: 파일명 정렬 / 정규식, split, 구분자유지

HEAD, NUMBER, TAIL은 중간의 NUMBER 기준으로 갈라진다. 따라서 split과 숫자 정규식을 활용해 구간을 나누고 HEAD 기준으로 첫번째, NUMBER 기준으로 두번째 총 두 번 정렬을 수행한 뒤 나누어진 구간들을 join으로 합쳐 하나의 파일명으로 만들고 정렬된 파일명 리스트를 반환한다. import re def solution(files): temp = [re.split(r"([0-9]+)", s) for s in files] print(temp) sort = sorted(temp, key = lambda x: (x[0].lower(), int(x[1]))) return [''.join(s) for s in sort] point1. split을 수행하면 결과물은 list에 담겨 나온..

[파이썬] 프로그래머스: 카드뭉치

goals의 단어를 하나씩 돌면서 card1또는 cards2 뭉치의 맨앞 단어와 일치하는지 확인하고 일치한다면 삭제하여 다음 단어가 맨 앞으로 오게 만들어준다. 카드 뭉치 내에서 순서를 바꿔 탐색할 필요가 없으므로 두 카드뭉치 모두 이용할 수 없다면 바로 No를 출력하고 종료하도록 한다. def solution(cards1, cards2, goal): for i in goal: if len(cards1) and i == cards1[0]: del cards1[0] elif len(cards2) and i == cards2[0]: del cards2[0] else: return 'No' return 'Yes' point1. 조건문에서 각 카드 뭉치가 비어있지는 않은지 미리 확인하기 위해 len(cards1..

[파이썬] 프로그래머스: 과일 장수

최대 이익값을 반환하기 위해 주어진 과일 점수를 높은순으로 정렬하고, 앞에서 m개씩 끊어가며 규칙에 따른 해당 박스의 이익을 answer에 누적한다. 단, 마지막 박스에 m개가 가득 차지 않을 경우 연산을 수행하지 않기 위해서 while문으로 중단 조건을 선제시해준다. def solution(k,m,score): answer=0 start, end = 0, m score.sort(reverse=True) while (len(score[start:end]) == m): answer += (min(score[start:end])*m) start += m end += m return answer 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, ..

[파이썬] 프로그래머스: 삼총사 / 조합

조합을 활용한 기초적인 문제이다. 이 문제는 조합 원소의 개수가 크지 않고 3으로 고정되어 있어 구현이 쉽다. 원소 개수만큼 for문을 돌려 체크해볼 인덱스를 뽑으면 된다. 모든 조합을 돌면서 합이 0이면 count를 1 올려준다. def solution(number): answer = 0 for i in range(len(number)-2): for j in range(i + 1, len(number)-1): for k in range(j + 1, len(number)): if number[i] + number[j] + number[k] == 0: answer += 1 return answer 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하..

[알고리즘] 순열, 조합 (파이썬, C++)

조합과 순열 c++ 로 구현 https://yabmoons.tistory.com/99 https://yabmoons.tistory.com/100 저 위 블로그 주소에서 보고 알고리즘 공부중 써먹을곳이 많겠다 싶어서 작성합니다 백준 17281번 문제 푸는데 푸는법은 알겠어.. 근데 순열을 구 foameraserblue.tistory.com 파이썬으로 순열과 조합 구현하기 (+중복순열, 중복조합) + 추가가능한 부분 [순열] 서로 자리를 바꾸어 순열을 만드는 알고리즘으로 시간복잡도 최소화 [조합] n개에서 r개를 택할 때, r의 갯수를 하나씩 줄여가며 재귀로 푸는방식 (nCr = n-1Cr-1 + n-1Cr 활용 ninefloor-design.tistory.com [Python] 순열, 조합, 중복순열, 중..

[프로그래머스스쿨]자료구조/알고리즘 기초

힙 heap [자료구조] 힙(heap)이란 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io # 힙 이용법 from heapq import heapify, heappush, heappop lst = [5, 1, 2, 7, 4, 9, 8, 10, 3, 6] heapify(lst) # lst를 Heap으로 만들어줍니다. print(lst) # [1, 3, 2, 5, 4, 9, 8, 10, 7, 6] Heap 기준에서 바라볼 때 정렬된 모습입니다. heappush(lst, 3) # Heap에 3을 추가합니다. O(log n)이 소요됩니다. print(lst) # [1, 3, 2, 5, 3, 9, 8, 10, 7, 6, 4]..

[python/C++] 가장 큰 정사각형 찾기 / 동적 프로그래밍(DP)

가장 큰 정사각형 찾기 : 동적 프로그래밍(dp)#includeusing namespace std;int dp[1001][1001]={0};int solution(vector> board){ int ans=0; int row = board.size(); int col = board[0].size(); for(int i = 1; i  def solution(board): n = len(board) m = len(board[0]) # dp 준비 dp = [[0]*m for _ in range(n)] dp[0] = board[0] for i in range(1,n): dp[i][0] = board[i][0] # 2중 for문으로 연산 ..

이진탐색 사용처

가장 간단한 탐색 알고리즘은 선형 탐색 Sequential Search으로써 n개의 자료를 순서대로 하나씩 탐색하는 방법이다. 자료가 정렬된 상태에서는 이진탐색 Binary Search이 효율적이다. 이진탐색은 전체 자료의 중간에 있는 자료와 키값을 비교한다. 만약 일치하지 않는다면 찾고자 하는 자료는 앞부분 또는 뒷부분 중 어느 한 곳에 있다. (한번 탐색 후 다시 탐색할 자료 개수가 약 1/2로 줄어든다.) 예를 들어 1000개의 자료를 탐색한다면 2^10=1024이므로 최대 10번만 탐색하면 된다. 비교 결과, 키값이 가운데 있으면 인덱스 n을 반환, 왼쪽에 있으면 0~n-1, 오른쪽에 있으면 n+1~끝, 없으면 flag -1을 반환하게 한다.

[파이썬] 프로그래머스: 문자열 나누기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr text = list(input()) x = text[0] cnt_x=0 cnt_diff=0 result=0 i = 0 while True: try: if x == text[i]: cnt_x += 1 else: cnt_diff +=1 if cnt_x == cnt_diff: print(''.join(text[0:i+1]), end=' - ') text[0:i+1]='' #해당 위치까지의 텍스트 삭제 result += 1 cnt_x = 0 cnt_diff = 0 i=0 x=text[0] else: i += 1 i..