Algorithm & Data Structure

    [Java] 프로그래머스 : 모의고사

    https://programmers.co.kr/learn/courses/30/lessons/42840?language=java 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 풀이 처음에는 score을 받는 변수를 다 따로 해서 계산하다가 배열로 고쳐넣었다. 가장 높은점수를 받은 사람을 오름차순으로 넣어야하는 부분이 어려웠다. 정말 if문으로 다 비교하는 코드를 작성하려다 너무길어져서 Math.max() 함수로 최고 점수를 구해내고, 첫번째 학생의 점수부터 비교해서 차례대로 리스트에 넣어주도록 했다. impo..

    [Java] 프로그래머스 : k번째 수

    https://programmers.co.kr/learn/courses/30/lessons/42748?language=java 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 풀이 commands.length만큼 반복문을 돌린다. 새로운 int 배열 arr에 coomand[i][1]번째부터 command[i][0]번째 원소를 복사하고 정렬시킨다. arr 에서 k번째 수인 command[i][2]-1번째 원소 구해 answer[i]에 넣어준다. import java.util.Arrays; class Solution { public int[] solution(int[] array..

    [Java] 프로그래머스 : 시저 암호

    문제 코딩테스트 연습 - 시저 암호 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀 programmers.co.kr 풀이 단순하게 대문자인지 소문자인지 확인하고 더해놓고 기준을 넘어가면 다시 빼줬다. class Solution { public String solution(String s, int n) { char c[] = s.toCharArray(); // 대문자 65-90 소문자 97-122 for (int i=0;i=65 && c[i]90) c[i]-=26; } // 소문자인데 122 넘어가면 -26 else if (c[i]>=97 &&..

    [Java] 프로그래머스 : 콜라츠 추측

    https://programmers.co.kr/learn/courses/30/lessons/12943 코딩테스트 연습 - 콜라츠 추측 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2 programmers.co.kr 풀이 문제가 어려운 건 아니고 테스트 케이스 3번에서 결과가 488이 나와서 오류가 뜨길래 찾아보니, class Solution { public int solution(int num) { } 문제에서 입력값을 int 파라미터로 받지만 int의 경우 테스트 케이스 3번의 연산 과정에서 21억을 넘게되면서 이 과정에서 연산값 제한으로 ..

    [Java] 프로그래머스 : 3진법 뒤집기

    https://programmers.co.kr/learn/courses/30/lessons/68935?language=java 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr 풀이 10진법 -> 3진법 변환 나머지가 0이 될때까지 나눠주며 몫을 저장한다. 45의 경우 sb에 0021이 저장된다. 3진법 -> 10진법 변환 자릿수에 맞게 3의 배곱근을 곱해주며 다시 더한다. 0021을 reverse()함수로 반전해서 1200으로 만들고 곱해서 수월하다. class ..

    [Java] 프로그래머스 : 이상한 문자 만들기

    https://programmers.co.kr/learn/courses/30/lessons/12930# 코딩테스트 연습 - 이상한 문자 만들기 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 programmers.co.kr 풀이 처음에는 공백을 기준으로 문자열을 나누기 위해 split(" ")을 사용했는데, 테스트 점수가 68점이 나왔다. 틀린 점을 모르겠어서 찾아보니, split(" ")은 후행 공백을 처리해주지 않는다는 점을 알게 되었다. 만약 " hello "라는 문자열을 split(" ")으로 나눈다면 { "", "", "hello", "", ""] 가 아니라..

    [Java] 프로그래머스 : 문자열 내 마음대로 정렬하기

    https://programmers.co.kr/learn/courses/30/lessons/12915?language=java 코딩테스트 연습 - 문자열 내 마음대로 정렬하기 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱 programmers.co.kr 풀이 1. strings 배열의 각 배열의 n번째 원소를 비교해 정렬 => charAt() 2. n번째 원소가 같을 경우 사전순으로 앞선 문자열을 앞쪽에 위치 =>compareTo() charAt()는 인자의 위치에 있는 char값을 반환하는 String 클래스의 메소드..

    [Java] 프로그래머스 : 문자열 내림차순으로 배치하기 (feat. String <-> char[])

    https://programmers.co.kr/learn/courses/30/lessons/12917 코딩테스트 연습 - 문자열 내림차순으로 배치하기 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 programmers.co.kr 풀이 String -> char[] char[] ch = str.toCharArray(); char[] -> String 1. 단순히 (+) 연산 String은 불변객체라 String 객체와 String 객체를 더하는(+) 행위는 메모리 할당과 메모리 해제를 발생시켜 많아질수록 성능이 떨어진다. String str = ""; for(..