Search

프로그래머스 “큰 수 만들기” 문제에서 런타임 에러 오류

태그
Programmers
CoadingTest
RunTimeError
String
생성 일시
2024/02/04 10:45
해결여부
해결

Description

1.
프로그래머스 코딩 문제 큰 수 만들기를 진행하는 도중 런타임 에러 오류가 생겼다.
2.
매개변수로 어떤 값이 들어와있는지 모른 채로 코드를 진행해야 한다.
코드
3.
런타임 에러는 코드가 동작할때 발생하는 에러를 칭한다.
4.
코드가 동작하기 전에 발생하는 에러인 컴파일 타임 에러와는 다른 오류이다.
5.
해당하는 에러가 발생하는 이유는 대부분 접근 할 수 없는 값의 접근을 할 때 발생하게 된다.
a.
int N / 0
b.
파일이나 네트워크 자원에 대한 접근 오류
6.
현재 코드는 for문으로 가장 큰 수를 찾고
7.
While문으로 큰 수를 제외하고 문자들을 지우고 있다.
8.
두 가지의 반복문에서 런타임 에러 오류가 생기고 있다.
9.
for 문에서 sb.charAt(i) 이나 while 문에서 sb.delete(start,start+1); 이 문제일 것이다.
10.
for문과 while 문은 현재 같은 변수를 공유하는 측면이 있어서 하나를 수정하면 다른 하나도 수정을 해야한다.
11.
기능을 분리해서 처리하는것도 나쁘지 않은 방법인것 같다.

Try

1.
charAt() 메서드나 delete() 메서드는 문자열의 접근을 한다는 공통점이 있다
2.
문자열 메서드의 접근 할 수 없을때 저런 오류가 생긴다.
3.
즉 함수를 호출 할때 매개변수를 그 이전에 체크하면 될 것 같다.
4.
첫번째 for문에서는 length() 범위를 벗어나서 그런가 싶었는데 아니었다.
5.
아마 두번째 while 문 조건에서 charAt이 문제인것 같다.
6.
두번째 while 문에서 오류가 일어나는 이유는 문자열의 모든 자리수가 동일한 번호로 되어있으면 해당 for문에서 가장 큰 수를 찾으면 가장 앞 자리를 가져오고
7.
가장 앞 자리를 가져오면 delete 문으로 지울게 없는데 start는 하나 늘어나니 오류가 생기는것 같다.

Solution

import java.util.*; class Solution { public String solution(String number, int k) { String answer = ""; int start = 0; StringBuilder sb = new StringBuilder(number); int end = number.length() - k; while(0 < k) { // 가장 큰 문자의 인덱스를 저장할 변수 int maxIndex = findBigCharIndex(start, k, sb); char max = sb.charAt(maxIndex); while(sb.charAt(start) != max && 1 != sb.length()) { sb.delete(start,start+1); k--; } start++; if(start == end) { return sb.substring(0, start); } } return sb.toString(); } public int findBigCharIndex(int start, int k, StringBuilder sb) { // 가장 큰 문자를 저장할 변수 char max = ' '; // 가장 큰 문자의 인덱스를 저장할 변수 int maxIndex = 0; int end = (start + k) <= (sb.length()-1) ? (start + k) : (sb.length()-1); // 0부터 K까지의 문자들중 가장 큰 문자와 인덱스 탐색 for(int i = start; i <= end; i++) { // 현재 탐색중인 문자가 이전에 탐색한 문자보다 크다면 if(max < sb.charAt(i)) { // 이전에 탐색한 문자를 현재 탐색중인 문자로 max = sb.charAt(i); // 이전에 탐색한 인덱스를 현재 탐색중인 인덱스로 maxIndex = i; // 변경 } } return maxIndex; } }
JavaScript
복사