-
[프로그래머스] 숫자 짝꿍코딩테스트 2025. 4. 2. 18:21반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131128
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
주어진 X, Y는 정수형태로 된 문자열이며, X 와 Y에 공통으로 등장하는 개수만큼 숫자를 사용하여 만들 수 있는 최대값을 반환하는 문제이다.
제한사항
* 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
* X, Y는 0으로 시작하지 않습니다.
* X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.접근
X Y 각각 0 ~ 9 까지의 숫자 갯수를 세고 int[10]에 담은 후 각 숫자별로 공통으로 갖고 있는 숫자를 갯수만큼 사용하여 answer에 붙여 반환한다.
public String solution(String X, String Y) { int[] xCnt = new int[10]; int[] yCnt = new int[10]; for( char c : X.toCharArray()){ xCnt[c - '0'] ++; } for( char c : Y.toCharArray()){ yCnt[c - '0'] ++; } StringBuilder answer = new StringBuilder(); //최대값 생성 : 9 ~ 0 까지 붙이기 for(int num = 9; num >= 0; num --){ int v = Math.min(xCnt[num], yCnt[num]); // X Y 에 존재하는 num의 갯수 //존재하지 않는 수는 연산되지 않음 // for( int i = 0; i < v; i ++){ // answer.append(num); // } answer.append(String.valueOf(num).repeat(Math.max(0, v)));//num을 0 과 v값 중 큰 값만큼 반복해 부착. } //예외처리 if(answer.length() == 0){ answer = new StringBuilder("-1"); } else if(answer.charAt(0) == '0') { answer = new StringBuilder("0"); } return answer.toString(); }
알게된 점
1. char 끼리의 연산 결과는 askii 코드로 계산되어 정수값이다.
ex) char c = '9'; // 57
xCnt[ c - '0' ] -> xCnt[9]
2. StringBuilder a.append("x").repeat(v) 는 "x"를 a 에 v회만큼 붙인다.반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 자바. Set 활용 중복제거 (0) 2025.04.03 [프로그래머스] 성격 유형 검사하기 (0) 2025.04.03 [프로그래머스] 삼총사 자바 (0) 2025.04.02 [프로그래머스] 콜라 문제 자바 (0) 2025.04.02 [프로그래머스] 옹알이 자바 substring (0) 2025.04.02