이후 대소문자 구분을 없애주기 위해 lower()함수를 써주고, 각 단어들을 얻기위해 공백을 기준으로 문자열을 분리해준다.
분리된 단어들이 금지된 단어인지 확인하여 허용된 단어만 리스트에 저장해준다.
collections.Counter를 사용하여 각 단어별 등장횟수를 구한 딕셔너리를 생성한다.
가장 많이 등장한 단어와 횟수는 인덱스 0번째에 하나의 쌍으로 오고, 해당 단어는 그 안에 인덱스 0번째에 존재하므로 most_common함수를 사용하여 [0][0]으로 접근해준다.
import collections, re
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
words = re.sub(r'\W+', ' ', paragraph).lower().split()
words_list = [word for word in words if word not in banned] # 금지된 단어는 제외
words_count = collections.Counter(words_list) # 단어별 등장횟수
most_count_word = words_count.most_common()[0][0] # 등장횟수가 가장 많은 단어 추출
return most_count_word
"""
Input: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit.",
banned = ["hit"]
Output: "ball"
"""
각 리스트에 주어진 문자열에서 맨 처음에 오는 단어는 식별자이다. 식별자를 제외하고 뒤에 오는 단어들을 기준으로 정렬해줘야 한다.
문제 조건으로 문자로 구성된 로그가 숫자보다 먼저 온다고 하였으므로, 문자열로 구성된 로그와 숫자로 구성된 로그를 각각 구분하여 리스트에 저장해준다.
숫자 로그는 입력 순서대로 한다고 하였으므로, 따로 정렬해주지 않는다. 하지만 문자열 로그는 단어 순서대로 정렬해줘야 하므로 리스트의 sort()함수에 key값을 줘서 어떤 것을 기준으로 정렬할 것인지 알려줘야 한다.
먼저 split()함수를 사용하여 공백을 기준으로 문자열을 각 단위별로 구분해준다. 식별자 뒤에 등장하는 단어들을 기준으로 정렬해야 하므로 단어들이 위치한 인덱스인 [1:]을 써준다. 그리고 만약 "let1 art can","let3 art zero" 혹은 "let1 art can","let1 art zero" 처럼 art가 겹치는 경우에는 맨 앞에 있는 식별자를 기준으로 구분해줘야 하므로 식별자가 위치한 인덱스 [0]을 써준다. 이렇게 2개의 기준을 한 쌍으로 정렬하게 해야 하므로 겉에 ()를 써서 감싸준다.
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
digit_list = [] # 숫자 로그 리스트
string_list = [] # 문자열 로그 리스트
for log in logs:
if log.split()[1].isdigit(): # 맨 앞의 식별자를 빼고 난 다음에 오는 로그가 문자열인지 숫자인지 판단하여 각각의 리스트에 저장
digit_list.append(log)
else:
string_list.append(log)
string_list.sort(key = lambda stlist : (stlist.split()[1:], stlist.split()[0]))
# 공백을 기준으로 문자열 로그를 word단위로 각각 구분해준다.
# 로그의 식별자를 제외하고 등장하는 문자열들을 비교하여 순차적으로 나열 & 식별자를 기준으로 순차적으로 나열
# 위 2개의 기준을 한쌍으로 넘겨 문자열 로그를 정렬한다.
sorted_logs = string_list + digit_list # 정렬된 문자열 로그와 숫자 로그 리스트를 합친 로그 생성
return sorted_logs
"""
Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
"""
class Solution:
def isPalindrome(self, s: str) -> bool:
# 공백제거를 해준 문자열을 한 문자씩 쪼개서 리스트에 저장
input_list = list(s.replace(" ", ""))
# replace("기존 문자", "바꿀 문자")
# 입력받은 문자가 영문자와 숫자인 경우에만 소문자로 바꿔주고 그 외에 문자들은 제거
lower_input_list = [input_element.lower() for input_element in input_list if input_element.isalnum()]
# isalpha() : 문자열인지 판별해주는 함수
# isalnum() : 숫자와 문자열인지 판별해주는 함수
# 리스트의 문자들을 복사한 후, 역순으로 뒤집는다.
reverse_input_list = lower_input_list.copy()
reverse_input_list.reverse()
result = True
# 역순으로 뒤집힌 문자들과 하나씩 비교하면서 동일한지 확인한다.
for i in range(len(lower_input_list)):
if lower_input_list[i] != reverse_input_list[i]:
result = False
break
return result
"""
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.
Input: s = "race a car"
Output: false
Explanation: "raceacar" is not a palindrome.
Input: s = " "
Output: true
Explanation: s is an empty string "" after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.
"""
다운로드가 완료되면 실행파일이 다운된 폴더로 들어가 install-tl-windows.exe를 오른쪽 버튼으로 클릭한 후, 관리자 권한으로 실행시킨다.
TeX Live를 새로 설치하는 것이므로 Install을 선택한 후, Next 버튼을 눌러준다.
Install 버튼을 누르면 알아서 설치가 진행되다가 아래의 이미지와 같은 install-tl-gui라는 새로운 창이 하나 더 뜬다.
이때 재빠르게 Specific mirror 버튼을 누르면 특정 mirror파일을 선택할 수 있다. 해당 메뉴에서 Korea를 선택하면 TeX Live를 다운받을 서버를 선택할 수 있다.
맨 처음에 있는 ftp.ktug.org/tex-archive/systems/texlive/tlnet은 느리다고 하니 적절히 다른 것을 선택해주자.
그럼 위와 같은 창이 다시 뜨게 되는데 내가 원하는 설정을 위해 advanced를 눌러주자.
Selections > Scheme > change 를 눌러 살펴보면 TeX Live의 모든 것을 다 설치할지 혹은 기본적인 것들만 설치하고 나머지 패키지나 언어들은 조금만 받을건지 등 다양한 선택지를 선택할 수 있다.
모든 언어들을 설치할 필요가 없고, 용량이 적은 상태여서 small scheme를 선택한 후, OK 버튼을 눌러줬다.
다음으로 한국어 지원을 위해 바로 아래에 있는 Customize 버튼을 누른다.
Languages 영역에서 스크롤을 내려 Korean을 클릭한 후 OK버튼을 눌러준다.
이제 설정이 다 끝났으면 install 버튼을 눌러 설치를 마저 진행해주자.
개개인의 컴퓨터마다 다르겠지만 본인의 경우 대략 6분 가량의 시간이 흐른 후 설치가 완료됐다. 가끔 설치하다 오류가 나는 경우가 있으니 살펴봐 주는 것이 좋다.
설치가 정상적으로 완료되면 위 사진처럼 Welcome to TeX Live! 라는 문구가 뜬다.
<설치오류>
사실 아래의 2개 오류를 거치고서 위와 같이 TeX Live 설치를 완료했다.
가끔 본인처럼 mirror 또는 MinGW 때문에 설치에 실패한 경우라면 아래와 같이 따라해보면 된다.
1) mirror 오류
Retrying to install: hologo [570k]
TeXLive::TLUtils::check_file_and_remove: checksums differ for C:\TEMP\tqbzDMXJJP\AJG7AZ6mtQ/hologo.source.tar.xz:
TeXLive::TLUtils::check_file_and_remove: tlchecksum=c9a8e2a3b4f35dc2da6339f9f2ba8e612398c7fe92455f021b5c006db34ce6e7e7a7a3cba08e5407516b8c171deccb742ecde1de0ba4e341392ded663ca280e2, arg=0fa9111eb2d1dd0ce076cb831466219be1f18b87e9520aafa15bdfea7636df836e77611e393909b6c410f6bd1aee76b76aa4779317fb4159353098aa95921ed4
TeXLive::TLUtils::check_file_and_remove: backtrace:
-> C:/Temp/nsl816B.tmp/install-tl-20211115/tlpkg/TeXLive/TLUtils.pm:2399: TeXLive::TLUtils::check_file_and_remove
-> C:/Temp/nsl816B.tmp/install-tl-20211115/tlpkg/TeXLive/TLPDB.pm:1978: TeXLive::TLUtils::unpack
-> C:/Temp/nsl816B.tmp/install-tl-20211115/tlpkg/TeXLive/TLPDB.pm:1838: TeXLive::TLPDB::_install_data
-> C:/Temp/nsl816B.tmp/install-tl-20211115/tlpkg/TeXLive/TLPDB.pm:1729: TeXLive::TLPDB::not_virtual_install_package
-> C:/Temp/nsl816B.tmp/install-tl-20211115/tlpkg/TeXLive/TLUtils.pm:1633: TeXLive::TLPDB::install_package
-> C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl:2135: TeXLive::TLUtils::install_packages
-> C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl:946: main::do_install_packages
-> C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl:700: main::do_installation
TeXLive::TLUtils::check_file_and_remove: removing C:\TEMP\tqbzDMXJJP\AJG7AZ6mtQ/hologo.source.tar.xz, but saving copy in C:\TEMP\_VIkABV93X
TLPDB::_install_data: downloading did not succeed (check_file_and_remove failed) for https://mirror.kakao.com/CTAN/systems/texlive/tlnet/archive/hologo.source.tar.xz
Installation failed.
Rerunning the installer will try to restart the installation.
Or you can restart by running the installer with:
install-tl-windows.bat --profile installation.profile [YOUR-EXTRA-ARGS]
or
install-tl-advanced.bat --profile installation.profile [YOUR-EXTRA-ARGS]
C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl: Writing log in current directory: C:/TEMP/nsl816B.tmp/install-tl.log
Wide character in print at C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 329.
Wide character in print at C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 329.
Wide character in print at C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 329.
Wide character in print at C:/Temp/nsl816B.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 329.
로그를 살펴봤더니 TLPDB::_install_data: downloading did not succeed 라면서 다운로드를 실패했다고 한다.
install-tl-gui라는 새로운 창을 살펴봤더니 기본적으로 kakao.com의 mirror를 불러오고 있으므로 이런 경우엔 Specific mirror 버튼을 눌러 특정 mirror파일을 바꾸면 해결할 수 있다.
2) MinGW 오류
Installing to: C:/texlive/2021
Installing [001/337, time/total: ??:??/??:??]: texlive.infra [430k]
xz: (stdin): Compressed data is corrupt
TLPDB::_install_data: Decompressing C:\TEMP\JgMlF2LsYl\TpXju1uud7/texlive.infra.tar.xz failed for https://ftp.kaist.ac.kr/tex-archive/systems/texlive/tlnet/archive/texlive.infra.tar.xz
TLUtils::install_packages: Failed to install texlive.infra
texlive.infra will be retried later.
Installing [002/337, time/total: ??:??/??:??]: texlive.infra.win32 [2722k]
xz: (stdin): Compressed data is corrupt
TLPDB::_install_data: Decompressing C:\TEMP\JgMlF2LsYl\Q5nck6sukY/texlive.infra.win32.tar.xz failed for https://ftp.kaist.ac.kr/tex-archive/systems/texlive/tlnet/archive/texlive.infra.win32.tar.xz
TLUtils::install_packages: Failed to install texlive.infra.win32
texlive.infra.win32 will be retried later.
Installing [003/337, time/total: ??:??/??:??]: tlperl.win32 [7010k]
xz: (stdin): Compressed data is corrupt
TLPDB::_install_data: Decompressing C:\TEMP\JgMlF2LsYl\zx1uF2ojiu/tlperl.win32.tar.xz failed for https://ftp.kaist.ac.kr/tex-archive/systems/texlive/tlnet/archive/tlperl.win32.tar.xz
TLUtils::install_packages: Failed to install tlperl.win32
tlperl.win32 will be retried later.
Installing [004/337, time/total: ??:??/??:??]: adobemapping [2120k]
xz: (stdin): Compressed data is corrupt
TLPDB::_install_data: Decompressing C:\TEMP\JgMlF2LsYl\TYiY8P33AH/adobemapping.tar.xz failed for https://ftp.kaist.ac.kr/tex-archive/systems/texlive/tlnet/archive/adobemapping.tar.xz
TLUtils::install_packages: Failed to install adobemapping
adobemapping will be retried later.
.
.
.
Installing [336/337, time/total: 05:10/3440:28:08]: zitie [347k]
tar: Skipping to next file header
TLUtils::untar: C:\Temp\nsoE1FC.tmp\install-tl-20211115\tlpkg\installer\tar.exe xmf C:\TEMP\JgMlF2LsYl\Y_i2eM4wA4/zitie.tar failed (in C:/texlive/2021/texmf-dist)
TLPDB::_install_data: untar failed for https://ftp.kaist.ac.kr/tex-archive/systems/texlive/tlnet/archive/zitie.tar.xz
TLUtils::install_packages: Failed to install zitie
zitie will be retried later.
Installing [337/337, time/total: 05:11/3451:34:02]: zxjafont [181k]
tar: Skipping to next file header
TLUtils::untar: C:\Temp\nsoE1FC.tmp\install-tl-20211115\tlpkg\installer\tar.exe xmf C:\TEMP\JgMlF2LsYl\B1Gx_lGbK9/zxjafont.tar failed (in C:/texlive/2021/texmf-dist)
TLPDB::_install_data: untar failed for https://ftp.kaist.ac.kr/tex-archive/systems/texlive/tlnet/archive/zxjafont.tar.xz
TLUtils::install_packages: Failed to install zxjafont
zxjafont will be retried later.
Retrying to install: texlive.infra [430k]
xz: (stdin): Compressed data is corrupt
TLPDB::_install_data: Decompressing C:\TEMP\JgMlF2LsYl\JjPQ1WCNTg/texlive.infra.tar.xz failed for https://ftp.kaist.ac.kr/tex-archive/systems/texlive/tlnet/archive/texlive.infra.tar.xz
Installation failed.
Rerunning the installer will try to restart the installation.
Or you can restart by running the installer with:
install-tl-windows.bat --profile installation.profile [YOUR-EXTRA-ARGS]
or
install-tl-advanced.bat --profile installation.profile [YOUR-EXTRA-ARGS]
C:/Temp/nsoE1FC.tmp/install-tl-20211115/install-tl: Writing log in current directory: C:/TEMP/nsoE1FC.tmp/install-tl.log
Wide character in print at C:/Temp/nsoE1FC.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 327.
Wide character in print at C:/Temp/nsoE1FC.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 327.
Wide character in print at C:/Temp/nsoE1FC.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 327.
Wide character in print at C:/Temp/nsoE1FC.tmp/install-tl-20211115/install-tl line 2479, <STDIN> line 327.
처음에 설치할 때부터 난리가 나버린다.
언제 설치했는지 지금은 기억도 나지 않는 MinGW 때문인데 로그를 보면 untar 또는 설치할 수 없다고 337개 모두 적혀있다. 이런 경우엔 시스템 환경변수 설정에서 MinGW의 경로를 잠시 빼줘야 한다.
윈도우 시작 버튼을 눌러 시스템 환경 변수 편집을 검색하여 클릭해주자.
시스템 속성 > 고급 탭에서 환경변수 버튼을 누르면 창이 하나 뜬다.
아래 쪽에 있는 시스템 변수 영역에서 스크롤해서 내리다 보면 Path라는 부분이 있는데 이를 누른 후 편집 버튼을 누른다.
그럼 환경변수 편집 창이 새로 뜬다. 여기서 MinGW가 포함돼 있는 경로를 찾아 복사하여 혹시 모르니 메모장에 저장해주도록 하자.
이후 환경변수 편집 창에서 MinGW 경로를 선택하여 삭제 버튼을 누른 후 확인 버튼을 누른다.
환경 변수 창에서 확인 버튼을 누르면 창이 닫힌다. 마찬가지로 시스템 속성 창에서도 확인 버튼을 눌러 주도록 하자.