오늘은 124나라의 숫자를 풀어보았다. 2진법은 0은 0, 1은 1, 2은 10인 것처럼 124의 나라에선 1은 1, 2는 2, 3은 4, 4는 11 이런 식으로 진행된다. 간단하게 이 규칙을 이용하여 제공되는 숫자를 124나라에 맞게 바꿔서 리턴하면 된다. 처음엔 간단한 문제라고 생각하고 가볍게 풀었다. 3의 배수에 맞게 숫자를 바꿔주면 되기 때문이었다. 하지만 나에게 그리 쉬운 문제가 아니었다. 제귀함수를 쓰려했는데 3의 배수일 때가 문제가 생겼다. 거기다 효율성 부분이 있어 100점 만점에 10점이 나왔다. 바꿔서 while문을 사용하여 써 보았지만 제귀함수와 구동방법이 같은 이유 때문인지 똑같이 10점이 나왔다. 어디서 잘못 계산했는지 다시 찬찬히 생각해봐야 할 것 같다. 개인적으로 프로그래머스에..
알고리즘 검색 결과
여러 번 글을 쓰다 보니 설명을 정말 못하는 게 느껴졌다. 때문에 먼저 예시를 보여주고 왜 그렇게 되고, 그것을 구현하기 위해 어떤 방법을 썼는지를 설명하는 것으로 순서를 바꿨다. 입출력 예시다. 먼저 progresses라는 vector에 [93, 30, 55]가 들어있다. 이것은 설정상 진척도를 의미한다. 다음으론 speeds에 [1, 30, 5]가 들어있는데 이것은 progresses에서의 같은 인덱스의 진행 속도다. 한마디로 한 사이클을 돈다면 progresses[0]은 93 + 1이 되어 94가 되고, progresses[1]은 30 + 30이 되어 60이 된다. 이것은 무제한으로 도는것이 아니라 progresses의 값이 100이 되면 끝나는데 문제는 먼저 끝났다고 그대로 return 되는 것이..
프린트의 끝은 뭐랄까. 허무함이었다. 여태까지 효용성, 그중에서도 시간 초과의 덫에 너무 크게 데었었다. 일단 성공한 코드를 보겠다. int solution(vector priorities, int location) { //답 int answer = 0; //순위가 몇 개 있는지 확인 int num[10][2] = { 0, }; for (int i = 0; i 0; i--) { if (num[i][1] != 0) { max = i; break; } } //계속 돌리다가 조건에 맞으면 브레이크 while (true) { int print; for (int i = 0; i -1) { if (print != 0) { priorities.push_back(priorities[0]); priorities.eras..
어제까지 했던걸 싹 갈아엎어야 했다. 문제가 내 생각처럼 쉽지 않았다. 그러면서 왜 중간에 큰 수가 있으면 순서가 바뀌는 것을 생각하지 못했는지 의문이 들기도 했다. 내가 틀리는 이유는 가장 앞, 뒤에서만 숫자가 제거될 때를 상정한 것이었다. 물론 그런 생각으로 로직을 짜진 않았지만 너무 쉽게 생각한 나머지 그렇게 되어 버렸다. 문제는 이걸 어떻게 구현할 것인가에 대한 것이다. 아무리 백터라지만 지우고 그 앞에 있는 숫자들을 전부 뒤로 밀어버리면 너무 무거워진다. 그렇다고 수학적으로 생각해보자니 딱히 떠오르는 것이 없다. 조금 더 고민해보는 수밖에 없는 듯하다.
오늘도 앞으로 나아가지 못했다. 어제보다 5점 올랐을 정도였다. 다해인 점은 그 이유를 찾아냈다는 것이다. 내 코드에서 문제가 일어나는 부분은 [2, 3, 2, 8]과 2,[1, 2, 3, 4, 1, 2, 5]와 1을 받았을 때의 문제점이다. 내가 선택한 알고리즘은 priorities[location]보다 하나 높은 순위의 마지막 인덱스를 찾아내서 먼저 location까지 순위가 높거나 같은 숫자의 개수와 한단계 높은 순위의 마지막 인덱스에서 끝까지 순위가 높거나 같은 숫자의 개숫를 더하는 것이었다. 문제는 위와같이 한단계 높은 순위의 마지막 인덱스가 location보다 앞에 있을때와 p뒤에 같은 숫자가 있을 때였다.(정확하겐 내가 상정한 것은 location이 순위에 밀려 결국 한단계 높은 순위의 마지..
내용은 프린터로 시작하지만 구현 내용을 짧게 설명하면 int형 배열과 정수를 받으면 지시해준 순위에 따라 배열의 정수 번째 값이 몇 번째에 출력되는지 알아보는 내용이다. 위와같은 사진에서 첫 번째 예시는 [2, 1, 3, 2]라는 배열과 2라는 정수를 받는다. 그러니 배열[2]의 값인 3이 몇 번째에 출력되는가를 return 시켜주면 된다. 순위는 1~9인데 1이 가장 작고 9가 가장 높다. 즉 첫번째 예시에서 3이 순위가 가장 높으니 첫 번째에 출력된다. 그러니 return값이 1이다. 두번째 예시는 [1, 1, 9, 1, 1, 1]과 0이다. 이 문제에서 순위가 밀려 출력하지 못하면 뒤로 가게 되는데 즉 9가 출력되기 전까지 상황을 보여주자면 [1, 1, 9, 1, 1, 1] -> [1, 9, 1, ..
최근댓글