2024. 12. 13. 20:05ㆍ코딩테스트 리뷰(프로그래머스)/코딩 기초 트레이닝 with Java
프로그래머스 기초 트레이닝
1) 뒤에서 5등 위로
https://school.programmers.co.kr/learn/courses/30/lessons/181852
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.Arrays;
class Solution {
public int[] solution(int[] num_list) {
Arrays.sort(num_list);
return Arrays.copyOfRange(num_list, 5, num_list.length);
}
}
2) 전국 대회 선발 고사
https://school.programmers.co.kr/learn/courses/30/lessons/181851
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(int[] rank, boolean[] attendance) {
int result = 0;
int num = 10000;
int rank_people = 1;
int cnt = 0;
do {
for( int i = 0; i < rank.length; i++ ) { // 등수를 찾는 반복
if( rank[i] == rank_people ) { // 1~3 등 일 경우
if ( attendance[i] ) {
result = result + (i * num);
num /= 100;
rank_people++;
cnt++;
break;
} else {
rank_people++;
}
}
}
} while( cnt < 3 );
return result;
}
}
3) 정수 부분
https://school.programmers.co.kr/learn/courses/30/lessons/181850
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(double flo) {
return (int) flo;
}
}
4) 문자열 정수의 합
https://school.programmers.co.kr/learn/courses/30/lessons/181849
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.Arrays;
class Solution {
public int solution(String num_str) {
return Arrays.stream(num_str.split("")).mapToInt(Integer::parseInt).sum();
}
}
풀이 과정
일단 해당 문제에서는 문자열을 준다.
그러면 간단하게 생각을 해보면
모든 문자열을 문자로 나누고 그것을 Int 타입으로 만들어서 더하면 정답이다.
1. 문자열을 문자로 나눈다 => num_str.split("");
2. int 타입으로 변환한다. => Arrays.stream([배열]).mapToInt(변환 타입)
3. 더한다 => sum()
Stream API를 처음 보는 사람이라면 한줄에 너무 많은 정보가 있을 수 있어 보기 어렵다고 생각할 수 있지만,
사용하다보면 프로그래머스 코딩테스트를 하는 입장에서는 좋으나
Stream API 성능이 별로라고 하니 안쓰는 것이 좋겠으나, 사용방법은 알아두는 것이 좋다고 생각한다.
5) 문자열을 정수로 변환하기
https://school.programmers.co.kr/learn/courses/30/lessons/181848
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(String n_str) {
return Integer.parseInt(n_str);
}
}
6) 0떼기
https://school.programmers.co.kr/learn/courses/30/lessons/181847
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public String solution(String n_str) {
int index = 0;
for( int i = 0; i < n_str.length() -1 ; i++ ) {
if( n_str.charAt(i) != '0' ) break;
else if( n_str.charAt(i) == '0' && n_str.charAt(i+1) == '0' ) // 현 위치와 다음 위치가 0일때
continue;
else {
index = i+1;
break;
}
}
return n_str.substring(index);
}
}
풀이 과정 및 다른 해석
앞에서부터 검사를 하면서 index, index+1 이 0이면
다음 위치까지 검색을 하면서 앞에서 마지막 0 인부분까지 찾은다음
index를 기준으로 substring을 만들어서 리턴하면 정답이라고 생각했다.
가장 간단한 방법
타입을 int값으로 변환한다음 String 값으로 리턴하면 끝난다.
return "" + Integer.parseInt(n_str);
모든 값 앞에 ""을 더하면 String값으로 리턴이 되는 것을 까먹고 있었다.
다른 사람의 해석을 보니 기가 막힌 공식을 하나 본 것같은 기분이다.
7) 두 수의 합
https://school.programmers.co.kr/learn/courses/30/lessons/181846
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.math.BigInteger;
class Solution {
public String solution(String a, String b) {
BigInteger num_a = new BigInteger(a);
BigInteger num_b = new BigInteger(b);
BigInteger result = new BigInteger("0");
return String.valueOf(result.add(num_a).add(num_b));
}
}
풀이 과정
해당 문제에서 가장 큰 문제는 입출력에 주어지는 값의 크기이다.
간단하게 생각해서
Interger.parseInt([String값])
라고 생각했는데 범위가 18,446,744,073,709,551,615 1.8천경이다.
범위를 집고 가면
int => -2,147,483,648 ~ 2,147,483,647 (약 -21억 ~ 21억)
long => -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 ( 약 -900경 ~ 900경 )
그래서 해당 문제에서 보면 NumberFormatException 이 생기는 모습을 볼수 있다.
Long.parseLong([String값])
Long 값으로 해도 값이 부족해서 안되는 모습을 볼수 있는데
제한이 있는 타입들과 다르게 제한이 없이 사용할 수 있는 변수 타입이 있었다.
BigInteger 이라는 타입으로 숫자들을 문자열로 저장을 하고 사용한다고 한다.
그렇기 때문에 BigInteger는 초기화를 할 때 String 값을 받는 모습을 확인 할 수있다.
이제 더하는 방법은 add를 사용하여 더 할 수 있다.
참조
Java에서 큰 수 다루기 (BigInteger)
BigInteger 다루기 들어가기 전, BigInteger Java SE 7 공식문서와 coding-factory에서 참고하여 적은 것임을 밝힙니다. BigInteger를 사용해야 하는 이유 우리가 프로그램을 만들 때 조건에 의해 굉장히 큰 수의
lsmman.tistory.com
[JAVA] 자바 NumberFormatException 원인/예외처리해결
[JAVA] 자바 NumberFormatException 원인/예외처리해결 NumberFormatException 은 프로그램 코딩시 종종 일어나는 오류입니다. 영어 그대로 해석하면 숫자형 포맷 오류 발생입니다. 문자를 숫자로 변경시도하
lnsideout.tistory.com
8) 문자열로 변환
https://school.programmers.co.kr/learn/courses/30/lessons/181845
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public String solution(int n) {
return String.valueOf(n);
}
}
9) 배열의 원소 삭제하기
https://school.programmers.co.kr/learn/courses/30/lessons/181844
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
List<Integer> arr_copy = new ArrayList<>();
for( int i = 0; i < arr.length; i++ ) {
arr_copy.add(arr[i]);
}
for( int i = 0; i < delete_list.length; i++) {
if( arr_copy.contains(delete_list[i])) {
int temp = arr_copy.indexOf(delete_list[i]);
arr_copy.remove(temp);
}
}
return arr_copy.stream().mapToInt(i -> i).toArray();
}
}
풀이 과정
정적인 변수 타입으로는 수정 삭제를 하는 방법이 걸리적거린다고 생각했다.
동적인 타입으로 만들어주고 arr_copy를 한다음에
arr_copy 목록에 delete_list[i] 값이 있으면 위치를 찾고 삭제하는 과정을 만들었다.
배열에 값이 있는 지 확인 => List.contains(값)
배열에 위치를 가져오기 => List.indexOf(값)
그리고 Integer과 int의 타입은 서로 다르다.
Integer는 Object타입이다.
참조
https://adjh54.tistory.com/137
[Java/Short] 배열/리스트 값 제거 방법 : 요소 첫번째/마지막 값 제거, 특정 값 제거
해당 글에서는 배열의 값들을 앞/뒤의 값을 제거하거나 특정 조건에 따라 제거하는 방법에 대해서 공유합니다. 1) 배열/리스트의 앞뒤 값 비우기 1. 배열의 첫번째 값 비우기 💡 해당 방법에서는
adjh54.tistory.com
https://hianna.tistory.com/539
[Java] 문자열에 특정 문자 포함 여부 확인하기 - contains, indexOf, matches
문자열에 특정 문자가 포함되어 있는지 확인 하기 위해서 다음의 3가지 메소드를 사용할 수 있습니다. contains() / java.lang.String indexOf() / java.lang.String matches() / java.lang.String 1. contains() public boolean con
hianna.tistory.com
프로그래머스 코딩 테스트 입문
1) 옷가게 할인 받기
https://school.programmers.co.kr/learn/courses/30/lessons/120818
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(int price) {
if( price >= 500000 ) return (int) (price * 0.8);
else if ( price >= 300000 ) return (int) (price * 0.9);
else if ( price >= 100000 ) return (int) (price * 0.95);
else return price;
}
}
2) 아이스 아메리카노
https://school.programmers.co.kr/learn/courses/30/lessons/120819
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int[] solution(int money) {
int[] answer = new int[2];
answer[0] = money / 5500; //몇잔
answer[1] = money % 5500; //잔돈
return answer;
}
}
3) 나이 출력
https://school.programmers.co.kr/learn/courses/30/lessons/120820
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int solution(int age) {
return 2022-age+1;
}
}
4) 배열 뒤집기
https://school.programmers.co.kr/learn/courses/30/lessons/120821
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
int[] reverse = new int[num_list.length];
for( int i = 0; i < num_list.length; i++) {
reverse[i] = num_list[num_list.length - 1 - i];
}
return reverse;
}
}
다른 방법으로 Array 를 활용해서 Collections.reverse를 사용하는 방법 또한 있다.
5) 문자열 뒤집기
https://school.programmers.co.kr/learn/courses/30/lessons/120822
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public String solution(String my_string) {
StringBuilder sb = new StringBuilder(my_string);
return sb.reverse().toString();
}
}
풀이 과정
StringBuilder 혹은 StringBuffer 을 사용하면 간단하게 해결할 수 있다.
각 두개의 클래스는 reverse를 지원하기 때문이다.
6) 직각삼각형 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/120823
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for( int i = 0; i < n; i++ ) {
for( int j = 0; j <= i; j++ ) {
System.out.print("*");
}
System.out.println();
}
}
}
7) 짝수 홀수 개수
https://school.programmers.co.kr/learn/courses/30/lessons/120824
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[2];
for( int num : num_list ) {
if( num % 2 == 0 ) answer[0]++;
else answer[1]++;
}
return answer;
}
}
8) 문자 반복 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/120825
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
public String solution(String my_string, int n) {
StringBuilder sb = new StringBuilder();
for( int i = 0; i < my_string.length(); i++ ) {
for( int j = 0; j < n; j++) {
sb.append(my_string.charAt(i));
}
}
return sb.toString();
}
}
느낀 점
하루 2일씩 하고 있는데, 쉬운거지만 남이 해석한 것을 볼 때마다, 모르는 것을 찾을 때마다 부족하다고 느낀다.
열심히 해야겠다.
이제 다음은 프로그래머스 1레벨을 도전해보고, PCCP 도 도전해야봐야겠다.
'코딩테스트 리뷰(프로그래머스) > 코딩 기초 트레이닝 with Java' 카테고리의 다른 글
TIL) 코딩테스트 입문 Day 9 ~ 10 with Java (4) | 2024.12.24 |
---|---|
TIL) 코딩 기초 트레이닝 (1) | 2024.12.19 |
코딩 기초 트레이닝 Day 14 with Java (3) | 2024.05.22 |
코딩 기초 트레이닝 Day 13 with Java (2) | 2024.05.15 |
코딩 기초 트레이닝 Day 12 with Java (0) | 2024.05.14 |