문제번호 : 8958
문제 : OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. |
문제점 :
항상 사용하던 for문 / if 문은 연속적으로 + , - , * , / 를 했었는데 이번엔 중간에 한번씩 끊어주고 다시 연속된 숫자를 + 해야한다는게 나한텐 이해하기 어려운 부분이였다. 그래서 어떤 방식으로 접근을 해야할지 고민만 1시간~1시간 30분 했다.
시도 :
위에 고민한 내용은 1시간 ~ 1시간 30분.. 정말 그정도했다. 멍떄리면서 보다가 일단 썼다가 지웠다가를 반복했다.
처음 어떤식으로 접근해야 좋을지 3가지 방법을 작성했었다.
1) x -> replaceall("x","-") 로 x 값을 - 로 바꾼다음 - 로 끊어서 배열을 생성 후 갯수만큼 합산을 생각했다.
하지만 x -> - 로 바꿀 필요도 없었기 떄문에 배열의 갯수 합산만 머리속에 남겼다.
2) 문자만 배열로 묶어서 for문으로 연속된 숫자 += 하고 나머지값 전체 anwer = a + b 로 하는 방법
이것 역시도 굳이 a + b 로 나눠서 할 필요가 없기 떄문에 제외
3) ooxoo -> 1+2+0+1+2+0 이고 / x인 경우 0 으로 설정 / o가 연속일때 sum += sum 설정
위의 내용과는 다르게 그나마 접근할 수 있는 부분인거 같아서 3번으로 코드 작성
해결 :
고민과 고민 끝에 결국 결과 값을 얻었다.
'문자열'로 되어 있는 값을 '문자' 로 바꿔주기 위해 char[] b = a.toCharArray() 를 사용하여 문자로 만들어주었고
for문을 이용하여 b[i] 값으로 하나씩 '문자'를 불러왔고 if문으로 문자 'O' 값과 true / false 로 구분하여 true인 경우는
count++ 하고 false인 경우는 count = 0 초기화 설정해두었다.
마지막으론 count 값을 결과 값으로 result += count; 로 하여 드디어 결과값을 얻어 냈다.
class Solution {
public int solution(String a) {
int result = 0;
int count = 0;
char[] b = a.toCharArray();
// System.out.println(b);
for (int i = 0; i < a.length(); i++) {
if (b[i] == 'O') {
count++;
} else {
count = 0;
}
result += count;
}
return result;
}
}
public class Main {
/* 메인함수 */
public static void main(String[] args) throws Exception {
Solution s = new Solution();
Scanner sc = new Scanner(System.in);
String a = "OOXXOXXOOO";
int result = s.solution(a);
System.out.println(result);
}
}
알게된 점:
이번에 오래풀면서 꽤 몇가지 얻어간게 있다고 생각이 들었다.
1) 문자열 -> 문자 타입 변환의 이해
내용은 알아도 머리속으론 "같은 문자인데 왜 서로 이해를 못하지?" 라는 생각을 하고 있었던거 같다.
다른 타입도 이해를 하고 있는 중이지만, 이번에 문자열 -> 문자 타입 변환은 조금 알게 된거 같다.
2) 문자열은 "" , 문자는 ''
위에 말했듯이 이해를 못하고 있다보니 문자를 입력하고 ""(쌍따옴표)를 작성하고 오류났다고 엉뚱한곳으로 삽질하고 있었다. 그래도 오랜 삽질 덕분에 잊지는 않을거 같다..
3) 증가, 감소 숫자로 전체 값 찾기
if문 조건 충족시 count++ 으로 더한 값으로 주다가 false 값이 나오면 0으로 초기화하여 다시 true일때 처음부터 값이 + 가 되도 하는구나 라는 부분이 신기했다. 종종 써먹어야지.
'(TIL) and (WIL)' 카테고리의 다른 글
Spring 주특기 시작 (0) | 2023.02.04 |
---|---|
거스름돈 - baekjoon (0) | 2023.02.03 |
문자열 다루기 기본 - programmers (0) | 2023.01.31 |
나누어 떨어지는 숫자 배열 - programmers (0) | 2023.01.31 |
WIL 3주차 (23.1.23.~23.1.28) (0) | 2023.01.30 |