알고리즘 C#

☆백준 1543번 문서 검색 C#으로 문제 풀어보기☆

minsoungdev 2025. 12. 29. 15:00

안녕하세요 박민성입니다.

 

오늘은 백준 1543번 문서 검색을 풀어 보겠습니다.

 

전 글에서 블로그 열심히 쓴다고 했었지만

저의 열등함으로 인해서 쓰지 못하였습니다.

 

문제를 보면 

입력은 첫째 줄에는 문서의 길이 최대 2500자인 문서가 주어집니다.

둘째 줄에는 최대 길이가 50인 검색하고 싶은 단어가 주어집니다.

 

출력은 문서에 검색하고 싶은 단어가 중복되지 않고 몇 개가 있는지 출력합니다.

처음에는 문서와 검색하고 싶은 단어를 각각 a, b에 입력받아줍니다.

그리고 문서에 검색하고 싶은 단어가 있으면 count를 증가시켜주고 있는지를 체크하는 can을 선언해 줍니다.

 

for문을 이용하여 문서를 한번 싹 돌아서 찾을 겁니다.

for문 안에는 만약에 찾고자 하는 단어가 있으면 count를 ++해주고 b에 길이 - 1만큼 건너뛰어 줍니다.

왜냐하면 중복으로 체크하면 안 되기 때문에 만약 그 단어가 있었으면 그 길이만큼은 이미 체크된 것이 넘어가 줍니다.

그리고 can을 false로 해줍니다.

찾는 과정은 for문 안에 if문으로 문서 안에 단어와 찾을 단어 첫 글자 같은지 확인합니다.

그러면 b랑 i로 시작하는 문서 안에 단어가 같은지 확인합니다. 아니면 can을 false 해주고 break 해줍니다.

 

이걸로 끝인 줄 알았지만 이렇게 한다면 인덱스 아웃 오브 레인지가 나옵니다. 왜냐하면 a [i+j]에서 a를 넘을 수도 있기 때문인데요.

검사 전에 이렇게 i+j가 a에 길이와 같거나 많은지 확인하여 true면 can을 false로 만들고 break 냅니다.

마지막으로 count를 출력해 주면 됩니다.

 

이것이 전체 코드입니다. 하지만 이것은 틀렸습니다. 백준에 모든 예제 입력은 잘 나오지만 순서가 잘못되었습니다.

왜냐하면 만약에 

u

u

이렇게 입력이 들어온다면 정답은 1이지만 0이 나옵니다. 왜냐하면 검사를 위에서 해주기 때문인데요. 

해결하기 위해서

이렇게 검사를 뒤쪽으로 빼면 됩니다.

 

이것이 전체 코드입니다. 

 

이렇게 백준에 제출하였더니

정답이었습니다.

 

오랜만에 백준을 풀어서 머리가 많이 돌아갔습니다. 이렇게 if문이랑 for문을 많이 사용하니 예외 처리나 디버깅에 조금 어려움을 겪었습니다. 하지만 재미있었습니다. ㅎㅎㅎ

그래서 대충 메모장을 이용하여 일일이 예외를 찾았아서 고쳤습니다.