Share
Sign In
TIL 웹개발
TIL 웹개발 - 사고의 전환
서경태
👍
프로그래머스 '숫자 문자열과 영단어' 문제를 풀다보니 문제를 해결하는 방식은 주어진대로 하는 것이 아님을 느꼈다.
문제의 내용은 s가 "one4seveneight" 이런식으로 주어지는데 숫자로 올바르게 변환하는 함수를 만드는 것이다.
"one4seveneight" -> 1478 "23four5six7" -> 234567 "1zerotwozero3" -> 10203
먼저 나는 문제를 풀기 위해 영단어와 숫자가 일치하는 딕셔너리를 만들었다. 하지만 코드를 적다보니 딕셔너리를 사용하지도 않고 굉장히 단순하고 무식한 방법으로 풀었다.
def solution(s): answer = [] for i in range(len(s)): if s[i].isdigit(): answer.append((s[i])) elif s[i] == 'z': if i + 1 >= len(s): break if s[i+1] == 'e': answer.append('0') elif s[i] == 'o': if i + 1 >= len(s): break if s[i + 1] == 'n': answer.append('1') elif s[i] == 't': if i + 1 >= len(s): break if s[i+1] == 'w': answer.append('2') elif s[i+1] == 'h': answer.append('3') elif s[i] == 'f': if i + 1 >= len(s): break if s[i+1] == 'o': answer.append('4') elif s[i+1] == 'i': answer.append('5') elif s[i] == 's': if i + 1 >= len(s): break if s[i+1] == 'i': answer.append('6') elif s[i+1] == 'e': answer.append('7') elif s[i] == 'e': if i + 1 >= len(s): break if s[i + 1] == 'i': answer.append('8') elif s[i] == 'n': if i + 1 >= len(s): break if s[i + 1] == 'i': answer.append('9') return int(''.join(list(map(str, answer))))
문자열 s를 하나씩 풀어서 일치하는 조건의 값을 숫자로 돌려주는 함수다.
다른 사람의 문제 풀이를 보니 순서를 바꿔서 푸는 방법도 있었다.
num_dic = { "zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9" } def solution(s): answer = s for key, value in num_dic.items(): answer = answer.replace(key, value) return int(answer)
내가 처음 생각했던 것도 딕셔너리로 만들어 s의 일부값이 딕셔너리 키값에 들어있다면 해당 숫자를 반환하는 식이었는데 이 코드는 아예 딕셔너리부터 시작해서 s에 해당하는 값을 찾았다. 그리고 answer를 문자열 그대로 사용해 replace로 키값과 밸류를 치환했다.
내가 항상 리스틀 만들고 그걸 다시 해답에 맞게 조합하거나 조작해서 출력하는 경우가 많은데 시간복잡도면에서 리스트를 사용하지 않는게 더 좋으니 앞으로 다른 방법도 고민해야한다.
딕셔너리의 특성도 잘 알고 있어야 한다.
반복문에서 num_dict.items()는 키-값 쌍을 반환한다. 그래서 key, value를 동시에 추출하는 것도 가능하다.
만약 key만 뽑거나 value만 뽑을때는 .keys / .values 라고 적어줘야 한다.
Subscribe to 'kyugntae-ai'
Welcome to 'kyugntae-ai'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to 'kyugntae-ai'!
Subscribe
👍
Other posts in 'TIL 웹개발'See all
서경태
TIL 웹개발 - 유연한 사고를 가져라
알고리즘 조금 풀어봤다고 모든걸 알고리즘으로 풀려고 하기 시작했다. 펠린드롬 관련 문제를 백트래킹으로 풀면 결국 풀리는거 아냐? 하고 시작했는데... 파이참이 계산을 하다가 꺼져버렸다... 그래서 아 이건 안되겠구나 싶어.. 다시 코드를 작성했다. 조금만 더 유연한 사고를 가지면 사실 펠린드롬은 1/2로 충분히 계산할 수 있고 경우의 수가 아니면 굳이 백트레킹을 사용할 필요도 없다. 결국 내가 작성한 코드는 시간 복잡도는 O(n^2)다. 이상한거에 매몰되어 시간을 낭비하지 말자. 공부시간이 줄어든다.
서경태
TIL 웹개발 - 자료구조
기본적인 자료구조 연결리스트 스택 큐 해시테이블 힙 연결리스트 Array LinkedList 특정 원소 조회 O(1) O(N) 중간에 삽입 삭제 O(N) O(1) 데이터 추가 데이터 추가시 모든 공간이 다 차버렸다면 새로운 메로리 공간을 할당받아야한다. 모든 공간이 다 찼어도 맨 뒤의 노드만 동적으로 추가하면 된다. 정리
서경태
TIL 웹개발 - 빅데이터 인공지능
빅데이터 데이터의 종류 정형 데이터 정량적이고 수치로 확인할 수 있거나 구조를 가지고 있는 데이터를 의미 시간, 시계열, 데이터, 금융 데이터 등등 비정형 데이터 수치적으로 확인할 수 없거나 구조를 띄지 않는 데이터를 의미 그림, 소리, 영상 등등 반정형 데이터 정형 데이터와 비정형 데이터의 성격을 두 개 다 가지는 데이터 DICOM, JSON, XML, 스마프톤에서 위치 값을 함께 저장하는 사진 데이터 전처리 데이터를 AI에게 학습시키기 전이나 분석하기 전에 적합한 형태로 가공하는 작업 빅데이터 단순히 많은 양의 데이터를 의미하는 것이 아님. 규모, 속도, 다양성 - 3가지의 특성을 가진다. 규모 - 굉장히 방대한 양의 유의미한 데이터 속도 - 데이터의 생성 및 처리 속도가 매우 빠름 다양성 - 데이터의 종류 뿐만 아니라 형식이 다양하다. 데이터 수집 계획 빅데이터를 구성하기 위해서는 ㅁ여확한 수집 계획이 필요