CS 벼락치기 - 문자열
2022-06-13
문자열이 회문인지 확인
회문은 앞에서 읽어도 뒤에서 읽어도 똑같이 읽히는 문자열로, 지금과 같은 경우엔 공백과 특수문자는 제거되어 있으며 알파벳도 대/소문자 중 한가지만 사용한다. 그럼 문제가 너무 간단해진다. 문자열을 s, 문자열 길이를 l이라 할때 그냥 s[] = s[] (++, --, i를 까지만 진행시켜도 된다.) 여부만 체크하자.
문자열이 어구전철인지 확인
어구전철은 순서만 다르고 문자의 구성이 같은 문자열인데, 마찬가지로 번거로운 조건들은 모두 없다. 문자열 a,b가 있을 때 두 문자열을 모두 리스트로 변환하고 sort 내장함수를 이용해 정렬해주고 두 리스트가 같은지만 확인해주면 된다. 근데 여기에서 정렬을 할 필요도 없는 경우가 있다. 문자열의 길이가 다른 경우 볼 것도 없이 어구전철이 아니다. 그러므로 처음에 a의 길이와 b의 길이를 비교해주고 같으면 리스트 변환과 정렬을 진행해주는 것이 바람직하다.
텍스트에서 패턴 탐색하기
텍스트에서 패턴을 탐색할 때 텍스트가 t="hello python", 패턴이 p="py"라면 어떻게 동작하는지 보자. , 가 있다. i는 텍스트 인덱스, j는 패턴 인덱스로 이면 와 를 모두 증가시켜가면서 이면 그때의 값을 반환해주면 된다. 일치하지 않는 부분이 나오면 으로 초기화하고, 는 증가시킨다. 하지만 이것은 단 하나의 부분을 찾을 때의 이야기이고, 패턴과 일치하는 여러 부분을 찾을 때에는 패턴과 일치하는 부분을 찾으면 을 리스트에 넣어주고 으로 초기화시켜준다.
숫자로 이루어진 문자열을 정수형으로 변환하기
"123"과 같은 숫자로 이루어진 문자열을 정수형으로 변환하는 것은 간단하다. 문자열이 numeric한지 확인한 후, sum = 0을 정의하고, sum에 10을 곱해가면서 각 문자의 아스키코드값에서 48을 뺀 값을 더해가는 작업을 해주면 된다.
문자열을 단어 별로 끊어서 리스트에 넣기
단순히 공백을 만나면 그전의 단어들을 모두 리스트에 집어 넣어주면 된다. 이때 슬라이싱을 써도 되고, 변수를 둬서 거기에 문자들을 넣다가 공백을 만나면 리스트에 넣고 그 변수는 다시 비워주고, 마지막에 그 변수를 리스트에 넣어주는 방식을 취해도 된다. 후자를 차용했다. 하지만 전자를 이용했을 때 훨씬 더 간결할 것 같다.