2024. 12. 16. 18:48ㆍ카테고리 없음
프로그래머스 기초 트레이닝
1) 부분 문자열
https://school.programmers.co.kr/learn/courses/30/lessons/181842
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(String str1, String str2) {
return str2.contains(str1) ? 1 : 0;
}
}
2) 꼬리 문자열
https://school.programmers.co.kr/learn/courses/30/lessons/181841
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public String solution(String[] str_list, String ex) {
StringBuilder sb = new StringBuilder();
for( String str : str_list ) {
if( str.contains(ex) ) {
continue;
} else {
sb.append(str);
}
}
return sb.toString();
}
}
3) 정수 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/181840
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(int[] num_list, int n) {
int answer = 0;
for( int num : num_list ) {
if( num == n ) answer = 1;
}
return answer;
}
}
4) 주사위 게임 1
https://school.programmers.co.kr/learn/courses/30/lessons/181839
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(int a, int b) {
int answer = 0;
if( a % 2 == 1 && b % 2 == 1 ) // 모두 홀수일 때
answer = (int) ( Math.pow(a,2) + Math.pow(b, 2) );
else if ( a % 2 == 1 || b % 2 == 1) // 하나만 홀수일 때
answer = 2 * ( a + b );
else answer = Math.abs(a - b);
return answer;
}
}
참조
https://lktprogrammer.tistory.com/114
[JAVA] 자바 - Math 클래스 (수학 관련 처리 클래스)
안녕하세요. 이번 포스팅에서는 수학과 관련된 작업을 처리할 수 있는 Math 클래스에 대해서 알아보겠습니다. Math 클래스는 java.Lang 패키지에 포함된 클래스로 수학과 관련된 일련의 작업들을 처
lktprogrammer.tistory.com
https://coding-factory.tistory.com/531
[Java] 자바 거듭 제곱 구하기 Math.pow()
자바에서 특정값의 제곱을 구하려면 java.lang.Math 클래스의 pow()메소드를 사용하면 됩니다. java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있습니다. Math 클래스가 제공하는
coding-factory.tistory.com
5) 날짜 비교하기
https://school.programmers.co.kr/learn/courses/30/lessons/181838
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(int[] date1, int[] date2) {
int answer = 0;
if( date1[0] < date2[0] ) return 1;
else if ( date1[0] == date2[0] && date1[1] < date2[1] ) return 1;
else if ( date1[0] == date2[0] && date1[1] == date2[1] && date1[2] < date2[2] ) return 1;
return answer;
}
}
6) 커피 심부름
https://school.programmers.co.kr/learn/courses/30/lessons/181837
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(String[] order) {
int answer = 0;
for( String a : order ) {
if( a.contains("americano") ) answer += 4500;
else if ( a.contains("cafelatte") ) answer += 5000;
else answer += 4500;
}
return answer;
}
}
풀이 과정
문제를 확인해보면 order의 원소는 여러가지가 있으나 ( 뜨거운 것, 찬 것 ) 의 가격차이가 없기 때문에
포함하고 있는지만 확인을 하면된다.
7) 그림 확대
https://school.programmers.co.kr/learn/courses/30/lessons/181836
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public String[] solution(String[] picture, int k) {
String[] answer = new String[picture.length * k];
for( int i = 0; i < picture.length; i++ ) {
String pic = scale(picture[i], k);
for( int j = i * k; j < k + ( i * k ); j++ )
answer[j] = pic;
}
return answer;
}
private String scale( String pic, int scale ) {
String[] p = pic.split("");
StringBuilder sb = new StringBuilder();
for( int i = 0; i < p.length; i++ ) {
sb.append(p[i].repeat(scale));
}
return sb.toString();
}
}
풀이 과정
대학교 때 글씨를 확대하는 과정이 어떻게 될까 하면서 생각을 한 것이긴한데, 코딩테스트로 확인을 해보니 신기하다..
해당 문제는 글씨의 스케일일 키우는 것인데
만약에 문자가 * 이고 k가 2라면
[*] => [**]
[**]
이렇게 된다.
간단하게 생각을 해보면
* 을 k 만큼 늘리고, k 만큼 똑같이 다음 배열에 추가를 해주면 끝난다.
private String scale 이 [*] => [**] 만큼 늘려주는 메소드이다.
메인에 있는 반복문이 그 [**] => [**][**]로 만들어주는 과정이다.
8) 조건에 맞게 수열 변환하기 3
https://school.programmers.co.kr/learn/courses/30/lessons/181835
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int k) {
if( k % 2 == 1 ) return Arrays.stream(arr).map(item -> item * k).toArray();
else return Arrays.stream(arr).map(item -> item + k).toArray();
}
}
문제 풀이
stream API를 사용하면 한줄로 줄일수도 있다.
return Arrays.stream(arr).map(item -> k % 2 == 1 ? item * k : item + k).toArray();
이런식으로도 줄일 수 있다.
9) l로 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/181834
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public String solution(String myString) {
StringBuilder sb = new StringBuilder();
for( int i = 0; i < myString.length(); i++ ) {
if( myString.charAt(i) < 108 ) sb.append("l");
else sb.append(myString.charAt(i));
}
return sb.toString();
}
}
간단한 풀이
replace에 안쪽에 조건으로 정규식을 넣으면 해결이 된다.
myString.replaceAll("[^l-z]", "l"); 하면 끝난다.
참조
https://zhfvkq.tistory.com/5#google_vignette
[JAVA] 정규 표현식(replaceAll)
String.replaceAll('From','to') - 대상 문자열 모두를 원하는 문자 값으로 변환하는 함수 ^ 문자열의 시작 $ 문자열의 종료 . 임의의 한 문자(필수입력, 문자의 종류 가리지 않음) 단, \ 는 넣을 수 없음 *
zhfvkq.tistory.com
10) 특별한 이차원 배열 1
https://school.programmers.co.kr/learn/courses/30/lessons/181833
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int a = 0;
for( int i = 0; i < answer.length; i++, a++ ) {
for( int j = 0; j < answer[i].length; j++ ) {
if( j == a ) answer[i][j] = 1;
}
}
return answer;
}
}
풀이
a 라는 플레그를 새워두어 작성을 하였다.
하지만 생각을 잘 해보면 더욱 쉽고, 시간복잡도 또한 낮게 푸는 방법이 있다.
Java 에서는 int 배열이 만들어질때 처음부터 0으로 초기화가 되서 만들어진다.
이제 대각선으로 1 적히는 모습을 확인을 할 수 있는데,
[0,0], [1,1], [2,2], [3,3], ... , [ n, n ] 의 모습이 된다.
즉, 배열을 n * n 사이즈로 만들고 => int 배열 전부 0 으로 초기화
i 가 n 보다 작을 때,
[i, i] = 1 로 만들면
시간 복잡도도 O(n) 으로 만들 수 있다.
기존 코드의 시간 복잡도는 O(n^2) 이다.
느낀점
내일 배움 캠프까지 7일 남았다.
그 전까지 자바에 대한 기초는 때고 가고 싶다.
그리고 일본어 책 또한 구매를 하였는데, 한 동안은 죽었다 공부 해야겠다.