본문 바로가기

코딩테스트4

[Programmers] 문자열 압축 - python 문제 설명 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘.. 2022. 7. 1.
[Programmers] 숫자 문자열과 영단어 - python 프로그래머스 숫자 문자열과 영단어 문제이다. 영어를 숫자로 변환하는 문제이다. ex) seven3two4 -> 7324 def solution(s): dict = {"zero":0,"one":1,"two":2,"three":3,"four":4,"five":5,"six":6,"seven":7, "eight":8,"nine":9,"ten":10} for i in dict: if i in s: s = s.replace(i, str(dict[i])) answer = int(s) return answer 가장 먼저 생각나는대로 단순히 딕셔너리를 만들어 풀었다. 딕셔너리를 모두 돌면서 숫자가 영어로 쓰였으면, 숫자로 바꾸도록 했는데 그럴 필요가 없었다. 영어로 쓰였는지 판별하는 부분이 없었어도 됐다. for i i.. 2022. 6. 29.
[Programmers] 로또의 최고 순위와 최저 순위 - python 내가 구입한 로또 번호 n개를 알 수 없을 때, 내가 당첨될 수 있는 최고 순위와 최저 순위를 구하는 문제였다. def solution(lottos, win_nums): min = 0; max = 0 order = [6,6,5,4,3,2,1] for i in win_nums: if i in lottos: min += 1 for j in lottos: if j == 0: max += 1 max += min print(min, max) answer = [order[min], order[max]] return answer 여기서 주의해야할 포인트는 로또 번호 당첨 개수와 등수가 반비례하다는 것이다. 전부 케이스 문으로 넣기에는 너무 일차원 적이고 출제자의 의도가 아니라고 생각하여 배열을 사용하였다. 채점 결과.. 2022. 6. 29.
[Programmers] 신규 아이디 추천 - python 프로그래머스의 신규 아이디 추천 문제입니다. 주어진 문자열을 아래 형식에 맞게 바꾸는 문제입니다. 정규식을 활용해 풀었습니다. 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다. 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. 만약 제거 후 마침표(.)가 ne.. 2022. 6. 28.