백준 문제 푼거 정리 - 문자열 사용하기 (2)
1316 그룹 단어 체커
이 문제는 어려워서 결국 인터넷 검색을 통해 도움을 받았다.
import sys
def rl(): return sys.stdin.readline()
total = 0
N = int(rl())
for _ in range(N):
word = rl()
for i in range(1, len(word)):
# 단어에서 2글자씩 비교하여, 앞 첫글자가 처음 등장하는 인덱스가, 뒷 글자가 처음 등장하는 인덱스보다 작으면,
if word.find(word[i-1]) > word.find(word[i]):
N -= 1
break
print(N)
배운점
- 입력받은 값을 int로 바꿔서, N으로 갯수를 세는 방법은 생각하지 못했다.
- 단어에서 2글자씩 비교하여, 앞 첫글자가 처음 등장하는 인덱스가, 뒷 글자가 처음 등장하는 인덱스보다 작으면, 뒷 글자는 앞서 이미 등장한 글자가 된다. -> 이런게 진짜 알고리즘이구나..
※ short 코딩
import sys
def rl(): return sys.stdin.readline()
total = 0
for i in range(int(rl())):
word = rl()
if list(word) == sorted(word, key=word.find):
total += 1
print(total)
if list(word) == sorted(word,key=word.find):
파이썬의 내장 함수인 sorted() 함수는 key라는 인수로 함수를 전달받아, 해당 함수를 실행한 결과값을 기준으로 정렬을 진행하게 됩니다.
따라서 만약 단어가 그룹 단어라면, 해당 단어의 각각의 문자를 그대로 리스트로 변환한 것과 find() 함수를 각각 적용한 후 그 결과값을 기준으로 정렬한 리스트가 같게 된다.
숏코딩은 그룹 단어인 것을 찾아가는 방식이다.
1152
split 함수
문자열을 -> 괄호안의 값을 구분자로 해서 리스트에 하나씩 담아준다!
ex) a = "Life is too short
a.split()
['Life', 'is', 'too', 'short']
이것만 알면 간단히 푸는 문제
상수
상수의 대답을 출력하는 문제
map(f,iterable)
[::-1]의 의미
arr[A:B:C] index A부터 index B 까지 C의 간격으로 배열을 만들어라. 따라서 -1칸 간격으로 ( == 역순으로)
import sys
def rl(): return sys.stdin.readline()
A, B = rl().split()
A = int(A[::-1])
B = int(B[::-1])
if A > B:
print(A)
else:
print(B)
# arr[A:B:C] index A부터 index B 까지 C의 간격으로 배열을 만들어라.
# 따라서 -1칸 간격으로 ( == 역순으로)
참고자료
1316번 https://aisiunme.github.io/algorithm/2018/08/13/baekjoon-group-word-checker-1316.md/
1152 https://wikidocs.net/13
python 문자열 뒤집기 https://dongyeopblog.wordpress.com/2016/11/21/python-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%92%A4%EC%A7%91%EA%B8%B0reverse-string/
python \n 제거 후 값 읽기