코딩테스트 53

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

로직은 스스로 생각해 냈지만,, 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..

[프로그래머스] 2023 KAKAO BLIND RECRUITMENT개인정보 수집 유효기간

2021년 12월 1일 에다가 12개월을 더하면,, 2022년 12월 1일이지 2023년 0월 1일이 아니다...... ㅎㅎ 월/일을 더하거나 뺄때는 몫이나 나머지를 구해야하기때문에,, -1하고 +1하는 로직을 사용해야한다. 아래 예시는 위 로직을 정상 수행한다.예시s[1] += ym; s[0] += (s[1] - 1) / 12; s[1] = (s[1] - 1) % 12 + 1;고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다. 예를..

[프로그래머스] 둘만의 암호

알파벳 넘어가는것은 그냥 if(index>25){idex-=26;} 하면된다.. 짧게 잘 푼듯두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다. 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다. index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다. skip에 있는 알파벳은 제외하고 건너뜁니다. 예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c,..

[프로그래머스] 카드 뭉치

한줄의 if문으로 확실히 걸러낼 수 없다면 그냥 복잡하더라도 자세히 쓰자..코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다. 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다. 한 번 사용한 카드는 다시 사용할 수 없습니다. 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다. 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다. 예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단..

[프로그래머스] 대충 만든 자판

다양한 테스트케이스를 점검합시다. 여기서 포인트는 문자를 만들 수 없는게 판단됐을때 바로 for문에서 break로 빠져나오는것.휴대폰의 자판은 컴퓨터 키보드 자판과는 다르게 하나의 키에 여러 개의 문자가 할당될 수 있습니다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀝니다. 예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가 할당되어 있다면 1번 키를 한 번 누르면 "A", 두 번 누르면 "B", 세 번 누르면 "C"가 되는 식입니다. 같은 규칙을 적용해 아무렇게나 만든 휴대폰 자판이 있습니다. 이 휴대폰 자판은 키의 개수가 1개부터 최대 100개까지 있을 수 있으며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배열되어 있습니다...