본문 바로가기
카테고리 없음

백준 #1316 2023-07-27

by 하타라시 2023. 7. 27.

문제를 보고 뭔소린가 했더니,,, 
해당 블로그를 보고 드디어 이해를 하였습니다,,

https://hyunsun99.tistory.com/142

 

처음엔 따라한 코드

int count = int.Parse(Console.ReadLine()); //입력
int sum = count; //합계
bool isNext = false; //체크 여부
    for(int i = 0; i < count; i++) {
        isNext = false; //초기화
        string put = Console.ReadLine(); //문자열 입력
        for(int j = 0; j < put.Length - 1; j++) {
            if(isNext) break; //이미 true일경우 탈출
            if(put[j] == put[j + 1]) 
                continue; //같을경우 다음 부분을 실행
            for(int k = j; k < put.Length-1; k++) {
                if(put[j] == put[k+1]) {
                    sum -= 1; //1빼고
                    isNext = true; //true로 만들기
                    break; //탈출
                }
            } 
        }
    }
Console.WriteLine(sum); //출력

 

이걸 보고 for문이 여러번 도늘걸 보고 생각을 고쳤더니 짧아졌당,,,

int count = int.Parse(Console.ReadLine()); //개수 입력
int sum = count; //합계

 

//첫번째 for문
for(int i = 0; i < count; i++) {
    string put = Console.ReadLine();
    bool result = false; //결과 초기화

 

    //두번째 for문
    for(int j = 0; j < put.Length - 1; j++) {
        if(put[j] == put[j + 1]) 
            continue;

        //세번째 for문 그러나 연산은 나중에,,
        for(int k = j; k < put.Length-1; k++) {
            if(put[j] == put[k+1]) {
                result = true;
            }
        

        //결과에따라 두번째 for문 탈출 즉 연산회수가 줄어들긴함,,,,
        if(result) {
            sum -= 1;
            break;
        }
    }
}
Console.WriteLine(sum);

그 외에 어째서 시간차이가 12ms나 났는지는 잘모르것다..

비록 메모리가 12정도 늘어났지만..

 

-----------------------------------------------------------------

 

저처럼 이해 못한분을 위한 문제 팁,,,,

 

1번 경우 

happy
new
year

여기서 happy 는 한개씩 보면

h - h가 1번 나옴(이전 알파벳과 중첩 X)

a - a가 1번 나옴(이전 알파벳과 중첩 X)

p - p가 1번 나옴(이전 알파벳과 중첩 X)

p - p가 2번 나옴(이전 알파벳과 중첩 O)

y - y가 1번 나옴(이전 알파벳과 중첩 X)

 

n e w도 동일하게 1번만 나옵니다,, 만일 newn이랬다면 오답이에요. n이 붙어서 나온게 아니라 떨어져서 나왔기때문에!

 

반례로

yzyzy
zyzyz

y - y가 1번 나옴(이전 알파벳과 중첩X)

z - z가 1번 나옴(이전 알파벳과 중첩X)

y - y가 2번 나옴(이전 알파벳과 중첩X) + 이미 y는 한 번 이상 나왔으므로 오답

z

y

 

z - z가 1번 나옴(이전 알파벳과 중첩X)

y - y가 1번 나옴(이전 알파벳과 중첩X)

z - z가 2번 나옴(이전 알파벳과 중첩X) + 이미 y는 한 번 이상 나왔으므로 오답

y

z

 

결과는 0이 출력됩니당,,