[Baekjoon] 1차원 배열 8958번: OX퀴즈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
public class Main {
public static void main (String args[]) {
String input;
int count = 1; //점수 세기
int score = 0;
char ox[] = new char[80];
Scanner scan = new Scanner(System.in);
int quiz = scan.nextInt();
for(int j=0; j<quiz; j++) { //quiz개의 배열에 대해 실행
input = scan.next();
for(int i=0; i<input.length(); i++) {
if((input.charAt(i) == 'O') || (input.charAt(i) == 'X')) { //O,X이면 처리
ox[i] = input.charAt(i);
} else if(input.charAt(i) == '\0'){ //엔터라면
ox[i] = '*';
}
}
//출력 확인 부분
for(int i=0;i<input.length(); i++) {
if(ox[i] == 'O') { //만약 배열 안의 값이 O이면
System.out.println("O의 인덱스 값 :" + i);
score += 1; //1점을 주고
if(i == input.length()) { //인덱스 값 넘어가면 안되니까 방지
break;
}
++i;
while(ox[i] == 'O') { //연속된 O의 개수만큼
++count; //초기값이 1이므로 증가하면 2
System.out.println("while문 통과, count값:" + count);
score += count; //1+2=3;
System.out.println("while문 통과, score값:" + score);
++i; //다음 인덱스로 넘어가기
//다음 인덱스가 'O'가 아니라면 break
if(i == input.length()) { //인덱스 값이 넘어가면 안되니까
break;
}
}
count = 1;
} else if(ox[i] == 'X') {
score += 0;
}
}
System.out.println("최종 값:" + score);
score = 0; //초기화
}
}
}
|
코드는 위와 같고 아래의 사진은 일일히 동작하는 모습을 보기 위해 sysout을 통해 알아본 바에 대한 결과이다. 그러나 왜인지 계속 틀렸다고 답이 나왔다. 아직 어느 부분이 결함인지 잘 모르겠다. 백준 커뮤니티에 질문을 해볼 예정이다. 그래서 검색 후에 다른 분의 코드를 참고한 후에 더 간결하게 코드를 줄일 수 있었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
String ox[] = new String[num];
for(int i=0; i<num; i++) {
ox[i]= scan.next();
}
int score, count;
for(String oxString : ox) {
score = 0;
count = 0;
for(int i=0; i<oxString.length(); i++) {
if(oxString.charAt(i) == 'O') {
score += ++count;
} else {
count = 0;
}
}
System.out.println(score);
}
}
}
|
스캐너로 배열의 크기를 입력받은 다음, String 배열을 입력받은 크기만큼 만든다.
그다음 이 String 배열 안에 한줄씩 num만큼 입력을 받는다. 여기서 주의해야 할 점은 String 배열이므로 엔터나 스페이스바를 친 대로 배열에 문자열이 들어가게 된다. 이것을 하나씩 끊기 위해서 아래와 같은 문법을 쓴다.
for-each문: for(String oxString : ox) 이 부분이다.
이 부분에 대해 설명을 하자면, oxString이라는 이름의 String을 생성하고, 그 안에 ox[0], ox[1]...등 인덱스에 해당하는 문자열들을 차례대로 for문으로 불러와 쓰겠다는 뜻이다. 알고리즘 문제를 해결할 때 많이 쓰인다는데, 나는 알고리즘 초짜라 쓰는 경우를 잘 보지 못해서 조금 생소했지만 편리함을 알게 되었다.
또한 여기서 주요하게 쓰인 것들 중 charAt(int index)가 있다.
이것은 String의 인덱스에 접근해 하나의 char를 출력하게 해주는 것으로 문자열을 하나씩 분리할 경우 유용하게 쓰이는 것을 볼 수 있다. 앞으로 문자열에 관한 알고리즘 문제가 있다면 이것이 요긴하게 쓰일 예정이다.
'Undergraduate Records' 카테고리의 다른 글
3회차 모각코 목표 (0) | 2019.07.17 |
---|---|
[인프런 강의] Swift 문법 - 1 (0) | 2019.07.16 |
[Beakjoon] 1차원 배열문제 2577번: 숫자의 개수 (0) | 2019.07.14 |
[Baekjoon] 입출력 마지막 문제 2588: 곱셈 (0) | 2019.07.14 |
[Baeakjoon] while문 1110번: 더하기 사이클 (0) | 2019.07.14 |