문제: "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고 X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제가지 연속된 O개의 개수가 된다. 예를 들어 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3=10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
(출처: https://www.acmicpc.net/problem/8958)
입력:첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
저 "각 테스트는 한 줄로 이루어져 있고" 를 이해 못해서 계속 헤맨 문제.
입력 자체를 한 줄로 하라는 말이었다... 아항... 쫘증
scanner 두개 받아도 상관 없는데, 여기서는 두개 선언하면 런타임이 났다.
그래서 우선 scanner는 한개 선언하고 int와 String 둘 다 모두 받았다.
그렇게 되면 위에서 받은 N도 for문을 거치게 되는데, 그렇게 되면 케이스를 한 번 덜 돌리게 돼서 i<=C번 돌렸다.
이번에도 굉장히 직관적으로....ㅋㅋㅋㅋㅋㅋ 풀었다. 두번째, 세번째 O가 들어온걸 어떻게 알 수 있을까 고민하다가
변수를 하나 선언해서 몇번 째 들어오는지를 그냥 체크했다. 그러고 나서 cnt랑 곱해서 그걸 더했다. 흠 근데 그렇게 할 필요가 있었나
그리고 X가 나오면 모든 변수를 초기화 시켰다.
이게 나온 이유는 scanner를 같이 받다 보니 필요없는 0이 계속 출력되길래..
출력되면 또 틀렸다고 할까봐...ㅋㅋㅋㅋ 그리고 모든 변수 초기화
어제 4시 30분에 자서 오늘 8시에 일어났더니 졸려서 아무것도 못하겠다.
하지만 지금 자면 또 새벽에 잘테니 잘 수도 없고 ㅠ_ㅠ
이거 푸는데도 너무 졸려서 죽을 뻔 했네ㅠ_ㅠ 으앙
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 | import java.util.Scanner; public class OX { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int C = scan.nextInt(); int cnt = 1; int cnt2 = 0; int no = 0; for(int i=0 ; i<=C ; i++) { String s = scan.nextLine(); char [] ox = s.toCharArray(); for(int j=0 ; j<ox.length ; j++) { if(ox[j] == 'O') { no++; cnt = 1*no; cnt2 = cnt2+cnt; } else if (ox[j] == 'X') { cnt = 0; no = 0; } } if(i!=0) System.out.println(cnt2); cnt2 = 0; no = 0; cnt = 0; } scan.close(); } } | cs |
'건승하고있어요 > 알고리즘' 카테고리의 다른 글
[1차배열] 평균점수 (4) | 2018.02.16 |
---|---|
[1차배열] 음계 (0) | 2018.02.15 |
[if] 더하기 사이클 (3) | 2018.02.12 |
[if] 평균은 넘겠지 / printf() 메소드 정리 (2) | 2018.02.11 |
[for] 2007년 달력문제 (0) | 2018.02.08 |