전체 글 55

[알고리즘 문제 풀이] - 짝지어 제거하기

같은 문자 두개가 붙어 있다면 제거가 되는 룰이 있네요. 그렇게 계속 제거를 해 나가다가 "cdcd"처럼 제거가 되지 않는 경우에는 0을 리턴하고 모두 제거가 되면 1을 리턴하면 되는 문제 입니다. 생각의 과정 1. 우선 입력된 문자열 s를 위한 loop이 하나 필요할것 같다. 2. 그 후에 안에 서로 연속된게 있는 loop을 하나 더 넣어서 nested loop을 만들까? 이러면 많이 느려질것이다. 3. 연속된게 2개 이상이라도 어차피 한번에 제거될수 있는 개수는 2개뿐이다. 4. 그렇다면 stack을 따로 만들어서 끝자리끼리만 비교해보자 풀이 def solution(s): stack = [] s_list = [ch for ch in s] while s_list: temp = s_list.pop() i..

Algorithm 2020.12.23

[알고리즘 문제 풀이] - 숫자의 표현

문제를 읽어보니까 Finn이라는 친구가 수학을 참 좋아하나 보네요...ㅎ 문제가 그리 어려워 보이진 않네요. 주어진 숫자를 연속된 숫자로 표현하는 방법이 몇가지나 있나 찾는 거군요. 1. nested loop을 써서 1부터 더해보자. 그 다음은 2 그다음은 3 이런식으로... 2. 문제가 너무 쉽게 풀린다. nested loop이니 효율성을 고려해보자 3. 일단 위에서 모든 숫자는 덧셈 없이 그대로 표현할수 있는 한가지 방법이 있으니 최소 1이다 def solution(n): answer = 1 middle = int(n/2) for i in range(1,middle+1): temp = 0 for j in range(i,middle+2): temp += j if temp == n: answer += 1..

Algorithm 2020.12.20

[알고리즘 문제 풀이] - 최댓값과 최솟값

요즘 시간 날때마다 프로그래머스에서 문제를 하나씩 풀어보고 있습니다. 문제 내용은 그리 길지 않네요. 이상하게 문제 내용이 길고 제한 사항이 많으면 시작부터 좀 꺼려 집니다.... 다른 문제를 고를껄 그랬나 하지만 이 문제는 짧고 원하는게 명확하네요. 주어진 string에서 최소값과 최대값만 찾아서 리턴하면 되는군요 1. string 안에서 숫자들을 뽑아내서 리스트를 만드는게 먼저일것 같다 2. 어떻게 숫자 사이 사이에 있는 공백들을 제거할것인가? 3. loop을 돌려도 되지만 그냥 split()을 쓰자. 4. 그 후에 리스트에서 최소값과 최대값을 찾는건 매우 쉬움 def solution(s): s_list = s.split() num_list = [int(x) for x in s_list] maxi, ..

Algorithm 2020.12.20

[알고리즘 문제 풀이] - 최솟값 만들기

요즘은 시간 날때마다 알고리즘 문제를 하나씩 풀고 있는데요. 프로그래머스에 있는 최솟값 만들기 문제를 풀어 봤습니다. "두개의 주어진 리스트에서 각각 한개씩 뽑아 두 수를 곱한 값을 더했을때 최솟값을 찾아라" 언뜻 보면 굉장히 골치 아픈 문제 같아 보입니다. 더할수 있는 모든 경우의 수를 찾아야 되나? 처음 봤을때 이런 생각 하신 분들 많을것 같아요. 곱했을때 1. 곱했을때 최소값을 만드려면 어떻게 해야 될까? 2. 첫번째 리스트에서 가장 작은 숫자와 두번째 리스트에서 가장 큰 숫자를 곱하면 최소값을 만들수 있다. 3. 마찬가지로 첫번째 리스트에서 가장 큰 숫자가 나온다면 두번째 리스트에서는 당연히 가장 작은 숫자가 나와야 함 def solution(A,B): answer = 0 A.sort() B.so..

Algorithm 2020.12.20

[코딩테스트 준비] 완전 탐색 ( Brute-Force Search ) - 모의 고사 문제 (Python 풀이)

설명 완전 탐색이라는건 모든 경우의 수를 전부 찾고 그중에서 답을 찾는 알고리즘을 뜻한다. 완전 탐색을 하는 방법에는 여러가지가 있는데 이중에 가장 대표적인게 Brute-Force Search 또는 Brute-Force Attack이라고도 불린다. 단어 그대로 직역을 해보자면 무차별 검색 또는 무차별 공격이라고 나오는데 무슨 말인지 잘 감이 오질 않아서 영어로 된 설명을 좀 찾아보았다. "Trying every single possibility rather than advanced technique to improve efficiency" 나는 이게 좀 더 와 닿았다. 시간 효율 고려하지 말고 가능한 경우의 수는 다 보자는 얘기 였다. 그렇다면 최소한 문제 내에서 시간 제한을 넉넉하게 주지 않을까 하는 ..

Algorithm 2020.12.08