알고리즘 48

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

import java.util.ArrayList; import java.util.List; class Solution { public int solution(int n) { int answer = 0; List number = new ArrayList(); //3진법으로 변환 + 뒤집을 거라서 0부터 넣어도 됨 while (n > 0) { number.add(n % 3); n = n/3; } //다시 10진법으로 변환 for (int j = 0; j < number.size(); j++) { answer += number.get(j) * Math.pow(3, number.size()-1-j); } return answer; } } 뒤집는다는 부분때문에 처음에 List배열을 만들어서 add를 사용하였는데 ..

Language/JAVA 2022.01.19

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

https://programmers.co.kr/learn/courses/30/lessons/12947 class Solution { public boolean solution(int x) { boolean answer = true; //charAt으로 변환하여 자리수를 계산하기 위해 String으로 변환 //String num = Integer.toString(x)도 가능 String num = String.valueOf(x); int sum = 0; //charAt을 아스키코드에서 숫자로 계산할 때는 '0'(혹은 48)을 빼야 함 for (int i = 0; i < num.length(); i++) { sum += num.charAt(i) - '0'; } //answer = (x % sum == 0) ..

Language/JAVA 2022.01.19

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

https://programmers.co.kr/learn/courses/30/lessons/12947 class Solution { public int solution(int num) { int answer = 0; //연산과정에서 int단위를 넘어가기 때문에 long으로 변환 필요 long n = (long)num; //500회에 대한 조건을 만족시키기 위해 501번 실행 for (int i = 0; i 1 && n % 2 == 0) { n /= 2; answer++; } else if (n > 1) { n = n * 3 + 1; answer++; } else if (n == 1) { //위의 두 조건에서 모두 n>1이 있어 없어도 되는 부분 break; } } ..

Language/JAVA 2022.01.19

[프로그래머스] 제일 작은 수 제거하기

https://programmers.co.kr/learn/courses/30/lessons/12935 이 문제를 풀면서 까다로운 점은 다음 2가지였다. 배열 순서 그대로 출력해야 한다. 가장 작은 수가 여러 번 있는 경우 모두 제거해주어야 한다. 제한 조건(인덱스)에 의해 배열 내 수 중복은 없다!! 따라서 answer의 길이는 (arr.length가 1인 경우를 제외하고) arr-1이다.따라서 굳이 ArrayList를 쓰지 않고 배열로도 해결이 가능하다. 이를 해결 하기 위해 최소값을 구하는 과정에서 정렬을 사용하기 위해 배열의 복사본을 이용 인덱스마다 최소값과 비교하여 원하는 값만 새로운 배열에 추가 또한 배열의 크기 변화가 필요하여 List배열을 이용하였다. import java.util.Array..

Language/JAVA 2022.01.19

[프로그래머스] 정수 내림차순으로 배치하기

https://programmers.co.kr/learn/courses/30/lessons/12933?language=java import java.util.Arrays; import java.util.Collections; //import java.util.List; class Solution { public long solution(long n) { //String[]로 split이용하여 한자리 씩 분리 String[] arr = String.valueOf(n).split(""); //내림차순을 위해 List배열로 변형 //List arr = Arrays.asList(String.valueOf(n).split("")); //내림차순 정렬 Arrays.sort(arr, Collections.revers..

Language/JAVA 2022.01.18

[프로그래머스] 자연수 뒤집어 배열로 만들기

https://programmers.co.kr/learn/courses/30/lessons/12932 int를 int배열로 만드는 방법은 https://paran21.tistory.com/36을 참고했다!(바로 연달아 풀어서 바로 적용할 수 있었다.) 이전에 문제를 풀면서, for문 사용할 때 조건에 따라 count와 같이 별도로 인덱스를 설정하는 것을 참고했는데, 응용해서 풀었다. import java.util.stream.Stream; class Solution { public int[] solution(long n) { //split을 사용하기 위해 string[]으로 변환 String[] arr = String.valueOf(n).split(""); //Stream을 이용하여 int[]로 변환 i..

Language/JAVA 2022.01.18

[프로그래머스] 자릿수 더하기 + Stream참고자료

이 문제의 포인트는 int를 int배열로 만드는 방법이다. 1) for문을 이용하는 방식 : 10의 배수를 이용. 자리수를 구한 후 for문을 이용(1자리 수부터 거꾸로 계산) 2) Stream을 이용하는 방식 split을 이용하기 위해 String으로 변환 mapToInt를 이용하여 int[]로 변환하기 위해 Stream으로 변환 import java.util.*; import java.util.stream.Stream; public class Solution { public int solution(int n) { int answer = 0; //Arrays.asList()는 primitive타입을 Wrapper클래스로(int를 Integer) X, 사용할 수 없음. //int를 string으로 변환 ..

Language/JAVA 2022.01.18

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

처음에 짰던 코드는 다음과 같다. 단어를 나눈다음에 띄어쓰기 기준으로 다시 합치기 위해 1) 단어를 배열로 나누고 2) 단어를 char[]로 나누어서 대문자로 변경을 하였다. 그런데 문제에서 "하나 이상의 공백문자"가 있어 해당 코드로는 테스트를 통과할 수 없다. import java.util.regex.Pattern; class Solution { public String solution(String s) { String answer = ""; //단어 수 구하기 int count = 1; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == ' ') { count++; } } //띄어쓰기 기준으로 잘라 배열로 만들기 String[] arr = new ..

Language/JAVA 2022.01.17

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

https://programmers.co.kr/learn/courses/30/lessons/42576 진짜 고민 많이한 문제인데, 결국 풀지는 못했다. 처음에는 Stream의 anyMatch로 했는데, 동명이인 문제를 해결하지 못했다. 그다음에 찾은게 List로 변환하여 removeAll하는 방식이었는데, 이역시 동명이인 문제를 해결하지 못했고, 변환을 꼭 해야한다는 문제가 있었다. 그 다음으로 생각한게 오름차순으로 동일하게 배열해주는 방식이었다. import java.util.Arrays; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; Arrays.sort(par..

Language/JAVA 2022.01.17