Algorithm

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

    문제 풀이 (1) 문제 분석하기 10진법 → 3진법 먼저 3진법을 어떻게 도출해내는지 알아보자. 10진법으로 표현되어 있는 수를 3으로 계속 나눈 나머지를 뒤에서부터 올린다. 45를 3진법으로 나타내면 1200이다. 3진법 → 10진법 다시 3진법을 10진법으로 변환해보자. 45 = ( 1 X 3³ ) + ( 2 X 3² ) + ( 0 X 3¹ ) + ( 0 X 3 ) 다시 문제로 돌아와서, 데이터 삽입이 자유롭고, 인덱스로 접근이 쉬운 Arraylist를 이용하였다. 반복문을 통해 3으로 계속 나눈 나머지를 list로 add() 한다. 포인트는 굳이 3진법 앞뒤반전을 하지 않아도 곱해주는 3의 n승으로 조정할 수 있다는 것이다. 10진법으로 변환할 때는 제곱 함수 Math.pow(밑, 지수)를 이용한다..

    [Java/프로그래머스] 하샤드 수

    문제 풀이 (1) 문제 분석하기 자릿수대로 누적합을 구한 후, 나머지 연산을 이용 이때 누적합을 구하면서 입력받은 x가 계속 재할당되기 때문에 x를 받을 변수를 하나 선언해야함 (2) 슈도코드 작성하기 누적합을 구할 변수 sum과 x를 받을 변수 num 선언 while(num이 0보다 크면) { num의 일의자리를 sum에 더하고 num을 10으로 나누기 } if(x를 sum으로 나눈 나머지가 0이면) { return true } return true (3) 코드 구현하기 package algorithm.test12; public class Solution { // 반복문 돌면서 자릿수대로 누적합 // 입력 받은 양의 정수로 나눠서 나머지가 0이면 true public static void main(St..

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

    문제 풀이 (1) 문제 분석하기 num의 최대 범위가 8,000,000이기 때문에 long으로 타입변환!! 반복문 안에서 조건문을 만들어 짝홀수를 판별 (2) 슈도코드 작성하기 입력 받은 num을 long타입으로 변환 횟수를 담을 answer 변수 선언 if(num이 1이면) { return 0 } while(num이 1이 아니면) { if(answer가 500이면) { return -1 } else if(num이 짝수이면) { num을 2로 나누고 answer++ } else if(num이 홀수이면) { num에 3을 곱하고 1을 더하고 answer++ } } (3) 코드로 구현하기 package algorithm.test11; public class Solution { // 1

    [Java/프로그래머스] 자릿수 더하기

    문제 풀이 (1) 문제 분석하기 요소 하나하나에 접근하기 위해 문자열로 변환하여 split 이용 반복문 돌면서 다시 숫자로 변환하여 더해줌 (2) 슈도코드 작성하기 정답을 담을 answer 변수 선언 입력 받은 n을 String으로 변환 split을 이용하여 String형 배열로 변환 for(String 배열의 길이만큼){ int형으로 변환하여 정답에 넣기 } 정답 변수 answer 출력 (3) 코드 구현하기 package algorithm.test06; public class Solution { // 숫자를 문자열로 변환 // split으로 문자열 배열로 변환 // 반복문 돌면서 parseInt로 바꿔준 배열 요소 하나하나를 answer에 더함 public static int solution(int n..

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

    문제 풀이 (1) 문제 분석하기 문자열 전체의 짝/홀수 인덱스가 아닌 공백을 기준으로 단어별 짝/홀수 인덱스 입력 받은 문자열 전체를 반복문으로 돌면서 각 단어의 짝/홀수 인덱스를 판단 공백을 만나면 인덱스를 판단하는 변수 0으로 초기화 (2) 슈도코드 작성하기 정답을 담을 answer 변수 선언 단어 안에서의 인덱스를 카운트 해 줄 index 변수 선언 for(입력 받은 문자열의 길이만큼){ if(공백을 만나면){ index 초기화 answer에 공백 추가 }else if(index가 짝수면){ answer에 i번째 문자열을 대문자로 추가 index++ }else if(index가 홀수면){ answer에 i번째 문자열을 소문자로 추가 index++ } } 정답 변수 answer 반환 (3) 코드 구현..

    [Java/프로그래머스] 완주하지 못한 선수

    문제 풀이 (1) 문제 분석하기 단 하나의 요소만 다른 2개의 배열을 비교하기 위해 두 배열 모두 정렬 → Arrays.sort() 완주자 배열을 기준으로 반복문을 돌면서 각각 i번째의 요소를 비교하고 일치하지 않으면 반환 → 이때 문자열 비교는 equals() 반환되는 값 없이 마지막까지 돌았다면 참가자 배열의 마지막 요소를 반환 (2) 슈도코드 작성하기 정답을 담을 answer 변수 선언 참가자 배열 오름차순 정렬 완주자 배열 오름차순 정렬 for(완주자 배열의 길이만큼) { if(참가자 배열의 i번째와 완주자 배열의 i번째가 다르면) { answer 변수에 참가자 배열 i번째 요소 넣기 break; }else if(i와 참가자 배열의 길이 -1 이 같다면) { answer 변수에 참가자 배열의 마지..

    [Java/프로그래머스] 수박수박수박수박수박수?

    문제 풀이 (1) 문제 분석하기 n의 길이의 짝홀수를 판별하여 i가 짝수이면 "수"를, 홀수이면 "박"을 더함 (2) 슈도코드 작성하기 정답을 담을 String 변수 answer를 선언 for(입력 받은 변수 n까지) { n 길이의 짝홀수를 판별하여 "수" or "박"을 answer 변수에 담음 } answer 반환 (3) 코드 구현하기 package algorithm.test03; public class Solution { // n까지 for문을 돌면서 // i가 짝수이면 "수"를 붙이고 // i가 홀수이면 "박"을 붙인다 public static String solution(int n) { String answer = ""; for (int i = 0; i < n; i++) { answer += (i..

    [Java/프로그래머스] 나누어 떨어지는 숫자 배열

    문제 풀이 (1) 문제 분석하기 arr의 길이는 정해져 있지 않으므로 배열 대신 Arraylist 사용 // 선언 List list = new ArrayList(); // add 메서드로 요소 추가 list.add(element) // list의 길이 list.size() // 리스트 오름차순으로 정렬 Collections.sort(list); // index에 접근 list.get(i) // String 타입의 List를 배열로 변환할 때 // int 형과 같은 primitive 타입 X stringList.toArray(new String[0]) return 타입이 int 타입의 배열이기 때문에 다시 배열로 변환하여 출력 (2) 슈도코드 작성하기 int타입 Arraylist 선언 for(입력 받은 배..