Algorithm

· Algorithm
문제 및 제한사항 나의 풀이 문제의 내용을 간단하게 요약하자면 다음과 같다. 사과의 가격을 나타내는 배열인 score가 주어질 때 사과를 m개씩 한상자로 묶고 m개를 충족시키지 못하는 사과는 버린다. 이 때, 사과 한 상자의 가격은 상자 내 제일 낮은 사과 가격 * m(상자 내 사과의 개수)이고 최대 이익을 낼 수 있는 방법으로 사과를 팔아야 한다. 이 문제를 보고 구상한 바는 다음과 같다. 1. 사과 상자에 담기지 않는 사과 버리기.(제일 싼걸로) 1-1. 사과를 버리기 위해 내림차순으로 사과를 정렬해 준 뒤 m의 배수가 되지 않는 사과 버리기(slice) 2. 사과 박스에 들어갈 수 있는 사과만을 남겨두었고 배열을 내림차순으로 정렬되었기 때문에 사과 한 박스 한 박스에 들어 있는 (score의) 인덱..
· Algorithm
문제 및 제한사항 나의 풀이 이 문제를 보자마자 같은 종류의 포켓몬이 몇 마리인지는 중요하지 않다는 생각이 들었다. 생각해본 문제 풀이는 아래와 같다. 1. nums의 중복을 없앤다. 2. 중복을 없앤 새로운 배열을 만든다. 3. 새로운 배열이 nums의 길이보다 길경우 nums의 길이/2를 리턴, 아닐경우 새로운 배열의 길이를 리턴 문제 풀이는 구상한 방식과 똑같은 형태로 진행해주었다. 문제 풀이를 조금 간단하게 설명해보자면 우리는 최대한 많은 종류의 포켓몬을 가져와야 하기 때문에 똑같은 포켓몬을 가져오지 않도록 중복을 없애주었다. 또한 최대로 많이 뽑을 수 있는 수가 nums.length/2 이므로 중복을 제거한 배열이 nums.length/2보다 크다면 nums.length/2가 최대로 뽑을 수 있..
· Algorithm
문제 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a,b를 입력받아 2016년 a월 b일이 무슨요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN, MON, TUE, WED, THU, FRI, SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다.) 입출력 예 a b result 5 24 "TUE" 나의 풀이 이번 문제의 풀이는 딱히 없다. 2016년 a월 b일을 Date 객체로 만든 뒤에 getDay()라는 메서드를 ..
· Algorithm
문제 코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다. 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다. 한 번 사용한 카드는 다시 사용할 수 없습니다. 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다. 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다. 예를 들어 첫 번째 카드 뭉치에 순서대로 ["i","drink","water"], 두 번째 카드 뭉치에 순서대로 ["want","to"]가 적혀있을 때 ["i","want","to","drink","water"] 순서의 단어 배열을 만들려고 한다면 첫 번째 카드 뭉치에서 "i"를 사용한 후 두 번째 카드..
· Algorithm
문제 "명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다. 이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일동안 진행된 가수의 점수..
· Algorithm
문제 및 제한사항 나의 풀이 처음 문제를 딱 보고 '어? 그냥 반복문 돌리면 되는거 아냐?' 라고 생각이 들었다. 하지만 문제를 조금 더 자세히 보고 나니 반복문으로 문제를 풀게 되면 바꾸지 못한 빈병과 남은 빈병의 합이 2 이상일 경우 빈병을 다시 콜라로 바꿀 수 없다는 문제가 존재했다. 여러 시도를 해본 뒤 '재귀함수'를 사용해서 풀면 되겠다는 생각이 들었다. 현재의 빈 병(n)이 a보다 클 경우 빈병을 주고 새로 받아온 콜라의 수를 리턴함과 동시에 다시 '남은 빈병'과 '새로운 콜라'를 '빈병의 수'를 가리키는 n에 넣어서 n=a가 될때까지 반복시켰다. (새로 받은 콜라를 넣어준 이유는 어차피 다 먹고 난 뒤 빈 병이 되기 때문이다.) n < a일 경우 'return 0'을 해줌으로써 마지막 ret..
· Algorithm
문제 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return하도록 solution함수를 완성해주세요. 제한 사항 numbers의 길이는 2이상 100이하입니다. numbers의 모든 수는 0이상 100이하입니다. 입출력 예 numbers result [2, 1, 3, 4, 1] [2, 3, 4, 5, 6, 7] [5, 0, 2, 7] [2, 5, 7, 9, 12] 나의 풀이 문제를 풀기에 앞서 문제의 해결방안과 순서에 대해 생각해봤다. 1. 두 개를 뽑아 더한다 2. 뽑은 값의 중복을 제거한다. 3. 새로운 배열에 넣는다. 4. 배열을 정렬한다. 첫 시작은 map과 forEach 메서드를 ..
· Algorithm
문제 및 제한사항 나의 풀이 문제를 풀긴 풀었는데 어제의 알고리즘 문풀에 비해 시간이 배로 걸렸고, 코드의 퀄리티가 배로 좋지 않다. 웬만해서는 알고리즘 문제를 풀고 나면 기분이 진짜 좋은데, 풀고 나서도 기분이 하나도 안좋았다. 일단 어떤 식으로 접근 했는지, 어떤 방법들을 시도했고 어떤 결과에 도출했는지 적어보겠다. 코드를 짜기 전 생각해본 코드 작성 과정은 다음과 같다. 1. (배열의 인덱스가 출력되는 음식의 값이고, 배열의 요소가 주어진 음식의 수이기 때문에) 각 배열의 인덱스와 함께 각사람이 먹을 음식의 수를 정수로 리턴하기. 2. 리턴한 인덱스를 각 사람이 먹을 음식의 수만큼 반복해서 0 앞에 붙이기. 3. 리턴한 인덱스를 각 사람이 먹을 음식의 수만큼 반복해서 0 뒤에 붙이기. 이렇게 구상하..
· Algorithm
문제 나의 풀이 이 문제를 보고 가장 처음 든 생각은 파라미터로 주어진 문자열 n을 한 글자씩 나눠서 새로운 문자가 나올 때 -1을 리턴해줘야 하는데 '어떻게, 새로운 문자가 나왔다!'라는 것을 표현해줄까? 라는 생각이 들었다. 그에 대한 해답으로 문자열의 문자 하나하나를 돌리기 전에 newStr을 빈 문자열로 지정해 준 뒤에 각 문자열이 newStr에 없으면 -1을 answer라는 배열에 넣어주고 newStr에는 현재의 문자를 넣어주는 식으로 반복문을 돌렸다. 반대로 문자열이 존재한다면 그 문자열의 인덱스와 현재 인덱스의 차이만큼을 빼준 값을 answer에 넣으면 되겠다고 생각했다. 하지만 현재의 문자의 위치와 그 전 현재의 문자와 같은 문자의 위치의 차를 구하는 것은 어려웠다. 현재의 문자 위치는 당..
윤찬님
'Algorithm' 카테고리의 글 목록 (2 Page)