코딩테스트 44

20220120 개발일지(WIL)

이번 주차는 알고리즘 기초 주간이었다. 개발일지라기보다는, 공부일지에 가까운 것 같다. 알고리즘 주간이었지만 실제 알고리즘을 공부했다기 보다는 JAVA 기본 문법을 익히는 시간이었다. 선정된 문제들은 프로그래머스 level 1 단계 문제들로, 찾아보니 1단계는 알고리즘에 대한 지식없이도 기본 문법을 가지고도 풀 수 있는 문제라고 한다. 처음에 JAVA라는 언어에 매력을 느꼈던 부분 중 하나는 타입과 관련된 부분이었다. 그런데, 실제 공부하면서 특히 초창기에 가장 힘들었던 부분도 타입이었다. 타입에 따라서 사용할 수 있는 메소드가 너무 달랐고, 문제에서 요구하는 타입으로 변환해서 반환하는 것도 힘들었다. 특히 처음에는 자바가 어떤 언어인지, 메소드는 어떻게 쓰는 건지, 어떤 식으로 동작하는지 파악이 안되서..

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

https://programmers.co.kr/learn/courses/30/lessons/42840#qna import java.util.ArrayList; import java.util.Arrays; import java.util.List; class Solution { public int[] solution(int[] answers) { //수포자별로 배열을 만들기 //찍는 방식을 배열로 생성 int[] p1a = new int[]{1, 2, 3, 4, 5}; int[] p2a = new int[]{2, 1, 2, 3, 2, 4, 2, 5}; int[] p3a = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; int[] p1 = new int[answers.length];..

Language/JAVA 2022.01.20

[프로그래머스] 같은 숫자는 싫어

https://programmers.co.kr/learn/courses/30/lessons/12906 import java.util.*; public class Solution { public int[] solution(int []arr) { //add 사용, 답안 배열의 길이를 모르기 때문에 ArrayList사용 List num = new ArrayList(); num.add(arr[0]); //num 배열의 index 선언 int k = 0; for (int x : arr) { if(!num.get(k).equals(x)) { num.add(x); k++; } } // for (int i = 0; i < arr.length; i++) { // if(!num.get(k).equals(arr[i])) {..

Language/JAVA 2022.01.20

[프로그래머스] 최소직사각형

https://programmers.co.kr/learn/courses/30/lessons/86491 이중배열 문제이다. 이중배열에서 원하는 값을 어떻게 꺼낼지, max를 어떻게 구할지에서 많이 헤맸다. 명함의 크기를 조정한다는 부분을 처음에 엄청 복잡하게 생각했었는데, 가로가 세로보다 큰 값으로 모두 통일하면 간단히 해결할 수 있는 문제였다. class Solution { public int solution(int[][] sizes) { //가로 세로 중 가로에 큰 값이 오도록 조정 for (int i = 0; i < sizes.length; i++) { if (sizes[i][0] < sizes[i][1]) { int a = sizes[i][0]; int b = sizes[i][1]; sizes[i]..

Language/JAVA 2022.01.19

[프로그래머스] 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