Language/JAVA 53

[프로그래머스] 예산

https://school.programmers.co.kr/learn/courses/30/lessons/12982?language=java 이 문제의 포인트는 두 가지이다. 1. 예산을 가장 많이 지급하려면, 신청한 금액이 적은 부서들에게 지급하면 된다. → 정렬 2. 지급한 금액이 budget 보다 크면 더 이상 지급할 수 없다. → break import java.util.Arrays; class Solution { public int solution(int[] d, int budget) { int answer = 0; int sum = 0; //1. 정렬 Arrays.sort(d); for (int i = 0; i < d.length; i++) { sum += d[i]; //2-1. 지급한 금액이 ..

Language/JAVA 2022.07.15

[프로그래머스] K번째수 #Arrays.copyOfRange

https://programmers.co.kr/learn/courses/30/lessons/42748?language=java 주어진 조건에 따라 배열에서 원하는 값을 찾아서, 배열로 출력하는 문제이다. int배열을 주어진 범위를 index로 잘라서 복사하는 메서드를 새로 알게 되었다. java.util.Arrays에 있는 메서드이다. 배열이기 때문에 from과 to가 배열의 범위를 벗어나면 에러가 발생한다. public static int[] copyOfRange(int[] original, int from, int to) { int newLength = to - from; if (newLength " + to)..

Language/JAVA 2022.07.01

[디자인패턴]controller pathvariable로 service 구현체 주입하기

인터페이스를 구현하는 여러 service 구현체가 있을 때, controller에서 pathvariable을 통해 구현체를 주입할 수 있다. 먼저 인터페이스를 하나 만들고, A와 B 두개의 구현체를 만들었다. public interface TestInterface { void save(); Type getType(); } @Service public class TestAImpl implements TestInterface { Type type; public Type getType() { return Type.A; } @Override public void save() { System.out.println("save A"); } } @Service public class TestBImpl implement..

Language/JAVA 2022.06.16

[Java with Unit Test] equals와 hashCode

넥스트스텝에 있는 를 시작했는데, 여기서 학습테스트를 소개하고 있다. https://edu.nextstep.camp/c/9WPRB0ys/ 플레이그라운드 edu.nextstep.camp 익숙하지 않은 API를 공부할 때 단위테스트를 작성하면 해당 API의 사용법도 알 수 있고, 단위테스트에도 익숙해질 수 있다. 코스 시작 부분에서 예제로 String의 몇몇 메서드들을 Junit과 AssertJ를 사용해 단위테스트를 작성하는 연습을 할 수 있다. 단위테스트를 통해 어떤 값이 들어가고, 그 결과가 어떻게 출력되는지 바로 알 수 있어서 좋다. 그래서 Java 공부를 할 겸 프로젝트를 하나 만들었다. Object 모든 클래스의 최고 조상이기 때문에 모든 클래스에서 바로 사용이 가능하다. equals(Object ..

Language/JAVA 2022.06.16

[프로그래머스] 신규 아이디 추천

https://programmers.co.kr/learn/courses/30/lessons/72410 class Solution { public String solution(String new_id) { String answer = new_id //1. 소문자로 치환 .toLowerCase() //2. 알파벳 소문자, 숫자, -, _, . 제외하고 모든 문자 제거 .replaceAll("[^\\.\\-_0-9a-z]", "") //3. 마침표.이 2번 이상 연속된 부분 하나로 치환 .replaceAll("[.]+", "."); //4. 마침표가 처음이나 끝에 위치한다면 제거 if (answer.startsWith(".")) answer = answer.substring(1); if (answer.ends..

Language/JAVA 2022.01.29

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

처음에 n이 커서 알파벳 범위를 여러 번 도는 경우를 생각하지 못해서 통과하지 못했다. n 대신 26으로 나눈 값 k를 더해줘서 알파벳 범위 안에서만 돌도록 조정해주었고, 대문자와 소문자로 경우를 나누어서 Z나 z는 추가로 -26을 해주었다. class Solution { public String solution(String s, int n) { String answer = ""; //char배열로 바꿈 char[] arr = s.toCharArray(); for (int i = 0; i < arr.length; i++) { //알파벳 안에서만 돌면 되므로 26으로 나누어서 나머지값만 더함 int k = n % 26; //대문자인데 더했을 때 'Z'보다 크거나, 소문자인데 더했을 때 'z'보다 크면 -2..

Language/JAVA 2022.01.27

#문자열 포함여부 확인, 치환 + 자주 쓰는 정규식 패턴

문자열 포함여부 확인 s.contains("문자") : true/false, 대소문자 구분 s.indexOf("문자") : 특정 문자의 위치를 반환, 찾지 못하면 -1을 반환한다. s.matches("문자") : true/false, 정규식 사용 가능 문자 대체 함수 s.replace(찾을 문자열-CharSequence target-, 바꿀 문자열-CharSequence replacement-) s.replaceAll(찾을 문자열-String regex-, 바꿀 문자열-String replacement-) 자주쓰는 정규식 패턴 숫자만 : ^[0-9]*$ 영문만 : ^[a-zA-Z]*$ 영문만, 띄어쓰기가능 : /^[a-zA-Z\s]+$/ 한글만 : ^[가-힣]*$ 한글만,띄어쓰기가능 : /^[가-힣\s]..

Language/JAVA 2022.01.27

[프로그래머스] 숫자 문자열과 영단어

https://programmers.co.kr/learn/courses/30/lessons/81301 문자열에 포함된 영단어가 있을 때 이를 숫자로 바꿔주는 문제이다. 처음에는 배열로 변환해서 바꿔야 한다고 생각해서, 이걸 어떻게 배열로 바꾸지 고민했는데 문자열을 대체할 수 있는 replace를 사용해서 해당하는 문자의 값을 바꾸면 된다. class Solution { public int solution(String s) { String[] arr = new String[]{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; for (int i = 0; i < arr.length; i++) { //포함하고 있을 ..

Language/JAVA 2022.01.27

[프로그래머스] 문자열 내림차순으로 배치하기

https://programmers.co.kr/learn/courses/30/lessons/12917 문자열을 char배열로 전환해서 정렬 후 다시 String으로 만들어주었다. import java.util.Arrays; class Solution { public String solution(String s) { String answer = ""; char[] arr = s.toCharArray(); Arrays.sort(arr); for (int i = arr.length-1; i >= 0; i--) { answer += arr[i]; } return answer; } } 마지막에 for문으로 돌려주었는데, StringBuilder를 사용할 수 있다. public class ReverseStr { p..

Language/JAVA 2022.01.27

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

https://programmers.co.kr/learn/courses/30/lessons/12915 문자열 배열이 주어지고, 해당 문자열의 특정 인덱스(n)를 기준으로 배열을 정렬하는 문제다. 특정 인덱스의 문자만 추출해서 배열을 정렬하고 나서 1. 이걸 이용해 원래의 배열을 정렬하는 부분 2. 인덱스 문자열이 같을 경우 사전순으로 배열하는 부분 이 어려웠다. 1.은 특정 인덱스의 문자를 추출한 배열은 원래 배열의 위치와 동일하기 때문에 이를 활용하기 위해 그대로 두고, 정렬을 위해 clone();으로 복사본을 새로 만들었다. 그래서 정렬된 배열(wordSort)과 원래 배열(word)을 비교하여 정렬 순서대로 해당되는 index를 찾고 이 index에 해당하는 strings값을 answer배열에 하나..

Language/JAVA 2022.01.26