자바 문자열 비교는 EQUALS쓰라고 좀.
왜 맨날 습관처럼 == 쓰고선 뻘짓 최소 30분.
-
연속되어~같은 문자일 경우를 찾으라는 문제일 때 어떻게 풀어야 하나?
배열에 집어넣고 배열[X+1]하면 인덱스바운드 익셉션이 나기 때문
예제) 연속되면 SCORE값을 올리는 것
변수를 하나 더 설정해줘서 초기값 정해주고 FOR문 돌면서 계속 업데이트 해줘야 함
check=splits[0];//첫 문자를 기억
System.out.println("CHECK 0값은"+check);
for(int i=1;i<splits.length;i++){
if(!check.equals(splits[i])){
check=splits[i];//연속 안되니 check값을 업데이트.
}
else if(check.equals(splits[i])){
score++;
sum[i]=score;
}
}
-
sum[] 따로 생성해서 연속될때마다 해당 점수를 (for문돌려서) 각 i 인덱스에 점수를 집어넣기로 함.
그 후 sum[] 안의 값들 다 더해서 정답 출력하기로 생각함
-
o가 연속되다가 다시 x가 나온다면 score값을 다시 0으로 초기화 시켜야 하는 것.
이것도 별도의 값을 선언해주고 초기값 주고 업데이트하는 방법으로
IF문에서 걸리면 SCORE값 없데이트
-
연속되는 문자가 0일때만 해당되기에 위 else if문의 조건을 하나 더 추가해줌
else if(check.equals(splits[i])&&check.equals("O")){
score++;
sum[i]=score;
}
문제 ㅈㄴ 잘못 이해하고 있었음
연속해서 맞은 문제만 점수에 들어가는 줄 알았는데 하,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
그마저도 점수 제대로 안나왔지만
아까우니까 여기 세이브
package till;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int case_num=scan.nextInt();
String[] inputs=new String[case_num];
for(int i=0;i<inputs.length;i++){
inputs[i]=scan.next();
}
for(int i=0;i<inputs.length;i++){
System.out.println("input한 것들: "+inputs[i]);
//System.out.println(inputs[i]);
System.out.println("total점수는: "+score(inputs[i]));
}
}
public static int score(String x){
String splits[];
splits=x.split("");
int score=0;
int[] sum=new int[splits.length];
int total=0;
String check;
int temp=0;
check=splits[0];//첫 문자를 기억
System.out.println("CHECK 0값은"+check);
for(int i=1;i<splits.length;i++){
if(!check.equals(splits[i])){
check=splits[i];//연속 안되니 check값을 업데이트.
score=sum[i-1];//IF문에서 걸리면 SCORE값 없데이트
System.out.println("check값"+i+"의 값은: "+check);
score=0;
}
else if(check.equals(splits[i])&&check.equals("O")){
score++;
sum[i]+=score+1;
}
}
for(int i=0;i<sum.length;i++){
total+=sum[i];
System.out.println("점수가 들어있는"+i+"의 값은: "+sum[i]);
}
System.out.println(total);
return total;
}
}
두 번째 시도:
문제에 나와있는 input값은 정답 잘 나옴
그러나 xxxoxxxx 이런 값은 잘 안나옴
그래서 if-else문 조건식 갈아 엎기로 함
package till;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int case_num=scan.nextInt();
String[] inputs=new String[case_num];
for(int i=0;i<inputs.length;i++){
inputs[i]=scan.next();
}
for(int i=0;i<inputs.length;i++){
System.out.println("input한 것들: "+inputs[i]);
//System.out.println(inputs[i]);
System.out.println("total점수는: "+score(inputs[i]));
}
}
public static int score(String x){
String splits[];
splits=x.split("");
int score=0;
int[] sum=new int[splits.length];
int total=0;
String check;
int temp=0;
check=splits[0];//첫 문자를 기억
System.out.println("CHECK 0값은"+check);
for(int i=1;i<splits.length;i++){
if(!check.equals(splits[i])){ //연속되지 않을 경우
check=splits[i];//연속 안되니 check값을 업데이트.
score=sum[i-1];//IF문에서 걸리면 SCORE값 없데이트
score=0;
if(check.equals("O")){
sum[i]=1;
}
}
else if(check.equals(splits[i])&&check.equals("O")){
if(splits[0].equals("O")){
sum[0]=1;
}
score++;
sum[i]+=score+1;
}
}
for(int i=0;i<sum.length;i++){
total+=sum[i];
System.out.println("점수가 들어있는"+i+"의 값은: "+sum[i]);
}
System.out.println(total);
return total;
}
}
세 번째 시도:
그냥..O나올때마다 CHECK값 ++해주고,
그렇게 증가한 값 점수만 저장해놓는 배열에 넣어두면 됐음
그리고 다시 X가 나오면 CHECK가 0 이 되야하는데
그건 그냥 ELSE문에 CHECK=0하면 됐음...
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int case_num=scan.nextInt();
String[] inputs=new String[case_num];
for(int i=0;i<inputs.length;i++){
inputs[i]=scan.next();
}
for(int i=0;i<inputs.length;i++){
score(inputs[i]);
}
}
public static int score(String x){
String splits[];
splits=x.split("");
int[] sum=new int[splits.length];
int total=0;
int check;
for(int i=0;i<splits.length;i++){
if(splits[i].equals("O")){
total++;//0보일때마다 1씩 증가
sum[i]=total;//0이 나온 인덱스i를 기억해 점수만 집어넣는 배열[i]에 total값 넣는다.
}
else{
total=0;
}
}
for(int i=0;i<sum.length;i++){
total+=sum[i];//점수 총 합하기
//System.out.println("점수가 들어있는"+i+"의 값은: "+sum[i]);
}
System.out.println(total);
return total;
}
}
'ALGORITHM > 푼 문제들&과정' 카테고리의 다른 글
해결 x, 기억 o 문제 list (0) | 2019.08.21 |
---|---|
[JAVA] 백준 1110번 (0) | 2019.03.03 |
[JAVA] 백준 1065번 (0) | 2019.03.03 |
[JAVA] 백준 4344번 (0) | 2019.02.27 |
[JAVA] 백준 4673번 (0) | 2019.02.26 |
Comments