본문 바로가기

TIL

슬기의 TIL - 2023.05.02

오늘은 알고리즘 문제를 풀었다.

 

문자열 반복

풀이

https://github.com/limseulki/Algorithm/commit/eed1c9e90dc3b22a36f9bd5e9a4bd4795ff6d13a

 

문자를 각 자리로 찢어서 입력받은 숫자만큼 반복 출력하면 되는 문제였고, 금방 풀었다.

 

문제는.. 다음 문제!

 

 

처음엔 문제를 이해하기 어려워서 몇 번을 읽었다.

겨우 이해하고 로직을 짜는데, 1번은 복잡해서 나머지 부터 잡아보았다.

error를 배열로 받고, error[i]가 1이면 에러가 발생한 거니까 반복문을 돌려 List에 발생한 에러를 추가해 출력하려고 했다.

 

// 2. 모든 춤은 clap stomp clap으로 끝나야 한다.
if(!s.endsWith("clap stomp clap")) {
	error[1]++;
}

// 3. 만약 twirl을 췄다면, hop도 춰야한다.
if(s.contains("twirl") && (s.indexOf("hop") != s.indexOf("twirl") + 6)) {
	error[2]++;
}

// 4. jiggle로 춤을 시작할 수 없다.
if(s.startsWith("jiggle")) {
	error[3]++;
}

// 5. 반드시 dip을 춰야 한다.
if(!s.contains("dip") && !s.contains("DIP")) {
	error[4]++;
}

// 지키면 from ok: 춤 출력
// 1개만 어기면 from error 어긴 번호
// 여러개 어기면 from errors 어긴번호, ... and (오름차순): 춤 출력
// 1번 규칙 어기면 어긋난 dip을 대문자로 출력
int count = 0;
List<Integer> index = new ArrayList<>();
for(int i = 0; i < 5; i++) {
	if (error[i] == 1) {
	count++;
	index.add(i);
	}
}

 

intellij에서 출력은 잘 되는데, 백준에서 제출만 하면 런타임에러가 나왔다...

내가 만난 무수히 많은 런타임 에러.....

 

 

배열 문제인 줄 알고, error 배열과 count를 없애고 index를 직접 추가해주어봐도 계속 같은 문제...

로직에 문제가 있는 줄 알고 바꿔가면서 시도했던 흔적인데, 결국 문제는 다른 곳에 있었다.

 

여러 케이스의 입력을 받기 위해 while문을 이렇게 사용했는데, 여기가 문제였다.

equals("")는 null과는 달라서 공백이 입력되면 프로그램이 종료되어버렸다.

이렇게 수정하여 null이 아닐때 반복되도록 하니 정답..!!

 


 

그런데 수 많은 에러를 만나며 코드를 꼼꼼히 보다보니 숨어있던 문제들을 발견했다.. ㅎㅎ

 

그 중 하나는 오타...!!

 

"form error 1:" 로 출력해야하는데, 처음부터 "from error 1:" 로 적어두고 코드를 짜고 있었다.. 휴..

 

그리고 index 리스트 하나로 해결되는 걸 count와 error배열까지 사용했던 것!?

 

중복을 줄이고, 실수를 줄이는 게 코드를 '잘' 짜는 길인 것 같다.

 

다시 화이팅!

'TIL' 카테고리의 다른 글

슬기의 TIL - 2023.05.04  (0) 2023.05.05
슬기의 TIL - 2023.05.03  (0) 2023.05.04
슬기의 TIL - 2023.05.01  (0) 2023.05.02
슬기의 TIL - 2023.04.29  (0) 2023.04.29
슬기의 TIL - 2023.04.28  (0) 2023.04.28