전체 글 139

[프로그래머스] 콜라문제

아니 나는 풀었는데 미친 답이 있어서 그게 이해가 안된다... 미친 답class Solution { public int solution(int a, int b, int n) { return (n > b ? n - b : 0) / (a - b) * b; }} a-b -> a개주면 b개 돌려받기때문에 (a-b) * b인거는 알겠는데,, 왜 n-b..?문제 설명 오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다. 정답은 아무에게도 말하지 마세요. 콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가? 단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다. 문제를 풀던 상빈이는 콜라 문제의 완벽..

[프로그래머스] 옹알이(2)

replaceAll의 단점. 예를들어 myea에서 ye를 공백으로 replace해버리면, ma가 되버리기때문에 발음가능하다고 착각되는 경우가 생긴다. 그러므로 공백으로 replace하지말고, 일단 "@"와같은 특수문자로 replace를 하고, for문이 전부 끝난 뒤에 @를 공백으로 replace해주면 정상적으로 통과한다. 코테의 맹점은 반례를 찾는것...문제 설명 머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 ret..

[프로그래머스] 햄버거만들기

시간복잡도를 따질때는,, java에서 제공하는 메소드를 for문안에 넣기보다는, 차라리 if문을 길게쓰는게 시간에 유리하다.나같은 경우에는 indexOf과 replaceAll을 써서 시간복잡도를 초과했다.햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높..

[프로그래머스] 푸드 파이트 대회

특별할 것 없는문제,, 얼른 레벨2로 넘어가야겠다..수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다. 이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 합니다. 이번 대회를 위해..

[프로그래머스] 과일장수

로직은 스스로 생각해 냈지만,, int배열을 내림차순 정렬하는게 기억이 안나서 Stream은 ChatGPT한테 물어봤다..int[] arr = {5, 3, 8, 1, 9};arr = Arrays.stream(arr) //int 배열인 arr를 각 요소에 대한 처리가 가능하도록 스트림으로 변환합니다. .boxed() //Comparator를 사용할 수 있게 기본 타입 int 값을 래퍼 클래스인 Integer로 변환 .sorted(Comparator.reverseOrder()) //Comparator.reverseOrder()를 적용하여 내림차순으로 정렬 .mapToInt(Integer::intValue) //정렬된 Stream를 다시 int로 언박..

[프로그래머스] 기사단원의 무기

약수를 구하는법은 1부터 n까지 나누어지는게 0인수들의 모음을 구하는법도 있지만 아래방법도 있다. 시간복잡도를 사용할때는 아래 방법을 쓸것. i*i 이전까지만 순회하면 되기때문에 속도면에서 유리하다 public int getY(int number, int limit, int power){ int ret = 0; for(int i = 1; i * i limit ? power : ret; }숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다. 각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나라와의 협약에 의해 공격력의 제한수치를 정하고, 제한..

[프로그래머스] 명예의전당(1)

뭐야 실패떴었는데 다시 실행해보니까 된다 프로그래머스 일해라~"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다. 이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. ..

[프로그래머스] 문자열 나누기

for문 안에서 인자(예를들어 i)를 변경하려면 for문 조건 및 변경로직을 잘 봐야한다.문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다. s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다. 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고,..

[프로그래머스] 가장 가까운 문자

무작정 for문 두개쓰면 시간복잡도에 걸린다.시간복잡도의 맹점은 for문을 대체할 Java 메소드를 어떤걸 쓸지인듯..?(아닐수도)..문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다. 예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다. b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다. a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다. n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다. a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2..

[프로그래머스] 크기가 작은 부분 문자열

큰 수를 다룬다 치면 그냥 BigDecimal이나 Long쓰자..숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요. 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.내 코드class Solution { public int solution(String t, String p) { int answer = 0; in..