IT/Algorithm(29)
-
Leetcode 9. Palindrome Number - Dart, Python
Leetcode 9 문제 보기 1. 문제 이해하기 정수 x가 주어진다. 이때 x가 palindrome이라면 true를, 아니라면 false를 출력하라. 2. 아이디어 구상 우선 int x가 입력값으로 주어지므로, 이를 string으로 치환, 거꾸로 뒤집어서 palindrome 여부를 판단하면 될 것이라는 생각이든다. 따라서 Python으로 풀 경우 boilerplate code를 제외하고 한 줄의 코드면 끝난다. class Solution: def isPalindrome(self, x: int) -> bool: return str(x) == str(x)[::-1] Dart의 경우에도 간단히 풀 수 있다. 다만 Dart는 string을 뒤집는 built-in function이나 [::-1] 같은 기법이 존..
2023.05.11 -
백준 1546. 평균 - Golang, Python
백준 1546 문제 보기 1. 문제 이해하기 n개의 점수가 주어진다. 이 중 최고점을 m이라 했을 때, 각각의 점수들을 "점수/M*100"으로 환산해 평균을 구하라. 예를 들어 2개의 숫자 10, 20이 주어진다면, {(10/20*100) + (20/20*100)} / 2 = 75, 따라서 75가 정답이다. 2. 아이디어 구상 구해야하는 값을 정리해보면 다음과 같다. 따라서 주어지는 전체 점수에 100을 곱한 후, 이를 전체 점수들의 개수와 최대값으로 나눠주면 된다. Python으로 풀 경우 주어지는 점수들을 리스트에 담아, 편리한 내장함수들을 이용해 간단히 문제를 해결할 수 있다. n = int(input()) nums = list(map(int, input().split())) print((sum(n..
2023.04.03 -
Leetcode 1. Two Sum - Dart, Python
Leetcode 1 문제 보기 1. 문제 이해하기 정수가 담긴 리스트 nums가 있다. 이때 리스트의 두 원소를 더해 정수인 target을 만족할 경우, 해당 두 원소의 인덱스의 조합을 출력하라. 하나의 원소를 중복 사용할 수 없으며, 각 test case의 정답은 딱 하나 존재한다. 2. 아이디어 구상 문제를 읽고 가장 먼저 떠오른 생각은 투 포인터를 이용해볼까하는 생각이었다. 그러나 조금만 생각해보면 투 포인터를 이용하기가 쉽지는 않다는 점을 알 수 있다. 투 포인터를 이용하려면 리스트 nums가 정렬되어야한다. 그러나 본 문제에서는 원소 그 자체가 아닌 인덱스를 출력해야하므로, 무턱대고 정렬할 경우 문제가 생길 수 있다. 때문에 정 투 포인터를 이용하고 싶다면, (value, index) 쌍으로 리..
2023.02.27 -
백준 1157. 단어 공부 - Golang, Python
백준 1157 문제 보기 1. 문제 이해하기 알파벳 대소문자로 된 단어가 주어진다. 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력하라. 단, 가장 많이 사용된 알파벳이 여러 개일 경우, ?를 출력하라. (단어의 길이는 1,000,000 이하) 2. 아이디어 구상 간단한 문제다. 주어진 단어를 탐색하며 각 알파벳이 몇 개인지 세고 가장 많이 등장한 알파벳을 리턴하면 된다. Python으로 풀 경우 collections 모듈의 Counter를 이용하면 주어진 String에서 가장 많이 출현한 character를 쉽게 얻을 수 있다. input으로 단어를 받아 모든 알파벳을 대문자로 변환한 후, most_common()을 통해 최빈출 알파벳을 구한다. 만약 알파벳이 여러 개면 ?를 리턴해준다. from..
2023.02.06 -
백준 1152. 단어의 개수 - Golang, Python
백준 1152 문제 보기 1. 문제 이해하기 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 문자열에 존재하는 단어의 개수를 출력하라. (문자열의 길이는 1,000,000 이하) 2. 아이디어 구상 아주 간단한 문제다. 주어지는 한 줄의 문자열을 받아 공백을 기준으로 split을 한 후에 개수를 count하면 된다. Python으로 풀 경우 코드 한 줄이면 끝난다. print(len(list(input().rstrip().split()))) 그러나 Golang으로 풀 경우, 조금은 더 생각을 할 필요가 있다. Golang에서 값을 읽어오는 방법은 여러가지가 존재한다. 그 중에 대표적으로 가장 많이 사용되는 2가지는 1. bufio.NewReader의 ReadString 2. bufio.NewScan..
2023.01.30 -
Leetcode 5. Longest Palindromic Substring - Python (cf. 백준 13275)
Leetcode 5 문제 보기 문제 이해하기 주어진 문자 s의 substring 중에서 가장 긴 팰린드롬인 substring을 찾아라. 즉, 뒤집어도 같아지는 (eg. 토마토) 부분문자열을 출력하라. (1 max_length: res = s[left:right + 1] max_length = temp_length left -= 1 right += 1 짝수 개일 경우 두 개의 연속된 문자들을 기준으로 퍼져나가자. left, right = i, i + 1 while left >= 0 and right max_length: res = s[left:right + 1]..
2022.12.15