알고리즘 문제 풀이 8

[알고리즘 문제 풀이] 로그 파일 재정렬

문제 로그를 재정렬하라. 기준은 다음과 같다. 로그의 가장 앞 부분은 식별자다. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다. 숫자 로그는 입력 순서대로 한다. 예제1 입력 logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"] 출력 ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"] 풀이1 풀이 방법은 람다와 '+' 연산자를 이용하기 이 문제는 요구 조건을 얼마나 깔끔하게 처리할 수 있는지를 묻는 문제다. 먼저, 문자로 구성된 로그가 숫자 ..

[알고리즘 문제 풀이] 문자열 뒤집기

문제 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라. 예제1 입력 ["h", "e", "l", "l", "o"] 출력 ["o", "l", "l", "e", "h"] 예제2 입력 ["H", "a", "n", "n", "a", "h"] 출력 ["h", "a", "n", "n", "a", "H"] 풀이1 투 포인터를 이용한 전통적인 방식의 풀이 투 포인터에 대해서 간단히 설명하자면, 단어 그대로 2개의 포인터를 이용해 범위를 조정해가며 풀이하는 방식을 말한다. 여기서는 점점 더 범위를 좁혀 가며 스왑하는 형태로 풀이할 수 있다. 문제에서 '리턴 없이 리스트 내부를 직접 조작하라'는 제약 사항이 있으므로 다음과 같이 문자열 strs 내부를 스왑하는 형태로 풀이..

[알고리즘 문제 풀이] 유효한 팰린드롬

문제 주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다. 예제1 입력 "A man, a plan, a canal: Panama" 출력 true 예제2 입력 "race a car" 출력 false 풀이1 리스트로 변환하기 이 분제에서는 직접 문자열을 입력받아서 팰린드롬 여부를 확인한다. 문제 설명 중 중요한 부분은 대소문자 여부를 구분하지 않으며 영문자와 숫자만을 대상으로 한다는 제약 조건이 있다. 따라서 이부분에 대한 전처리부터 구현한다. result = [] for ar in arr: if ar.isalnum(): result.append(ar.lower()) 여기서 isalnum( )는 영문자, 숫자 여부를 판별하는 함수로, 이를 이용해 해당하는 문자..