본문 바로가기

알고리즘 & 코딩테스트/코딩테스트

(45)
Programmers Lv.1 "음양 더하기" 요 문제는 특이한 유형이라고 볼 수 있다. 문제 자체의 난이도는 역시나 Lv.1답게 매우 쉬운데 구현을 요구하는 방식에서 독특한 유형을 가진다. 핵심은 이것이다. 주어진 숫자의 총합을 반환하는것. 단, 주어진 숫자의 형식이 일반적이지 않다. 바로, 각 숫자의 절댓값과 부호를 따로 준다는 점이다. 이는 병렬적으로 바라보면 바로 해결할 수 있는데 파이썬에서는 동일한 길이를 가지는 이터러블 객체에서 위와같은 병렬적 처리를 할 때 아주 유용한 zip()이 존재한다. zip()에 대한 내용은 따로 다루지 않을 것이지만 문제를 풀 당시 공부했던 링크를 첨부하겠다. 참고바란다. def solution(absolutes, signs): answer = [] for number, sign in zip(absolutes,..
Programmers Lv.1 "나누어 떨어지는 숫자 배열" 요 문제는 문제가 복잡해보이지만 그렇지 않은 설명만 긴 문제이다. 주어진 리스트에 대해 각 요소를 순회하면서 해당 값을 divisor로 나누었을 때 나눠지는 값들만 모아서 오름차순으로 정렬하면 된다. 아래 코드로 이해하자. def solution(arr, divisor): answer = [] for element in arr: if element%divisor==0: answer.append(element) if answer: answer = sorted(answer, reverse=False) else: answer.append(-1) return answer
Programmers Lv.1 "서울에서 김서방 찾기" 리스트안 특정요소의 인덱스를 찾는 문제입니다. 이 경우 index( )을 이용하면 됩니다. 한 가지 유의할 점이 있다면 리스트의 인덱스, 딕셔너리의 키값, range객체의 범위 처럼 유한한 범주를 가지는 값들에 대해서는 굉장히 조심스러워야 합니다. 지금처럼 간단한 문제야 발생하지 않겠지만 나중에 이를 고려하지 않게되면 흔히 자주보는 list out of range 에러를 자주 만나게될지도 모릅니다!!! 다행히 요 문제는 제한사항에 친절히 명시해주는군요ㅎㅎ def solution(seoul): position = seoul.index("Kim") answer = "김서방은 "+str(position)+"에 있다" return answer
Programmers Lv.1 "두 정수 사이의 합" 이 문제에서 눈여겨 봐야할 부분은 정수의 총합입니다. 파이썬에서 총합을 구하는 방식은 크게 2가지가 있습니다. sum() 을 사용한다. 반복문을 이용해 주어진 범주내 숫자를 하나씩 누적하여 합을 구한다. 상황에 맞게 사용하시면 될 것 같습니다. 개인적으로 본인이 주어진 상황에 대해서 알고리즘적으로 자세히 알 고 있다면 주어진 내장 함수를 사용하는 것이 좋다고 생각하는 편입니다. 😎😎 def solution(a, b): if a==b: return a elif a>b: listup = [ i for i in range(b, a+1)] return sum(listup) else: listup = [ i for i in range(a, b+1)] return sum(listup)
Programmers Lv.1 "정수 내림차순으로 배치하기" 새로운 개념이 하나 포함되어있는 문제입니다! 바로 "내림차순"인데요, 이는 주로 정렬을 할 때 큰수에서 작은수 순서대로 재배열함을 의미합니다. 자세한 내용은 알고리즘의 정렬에 관한 포스팅에서 다루도록 하죠! (왜냐하면 이 문제가 온전한 정렬이라고 볼 순 없거든요..ㅎㅎ) def solution(n): tmp = sorted(str(n), reverse=True) return int("".join(tmp))