++/자료구조&알고리즘 32

[baekjoon] 9012. 괄호

✅ 문제 💡 사용자에게 정수 하나를 입력받아 그 수만큼 문자열을 입력받고 괄호가 모두 쌍이 있는 경우 YES 출력(VPS에 해당), 괄호가 남는 경우 NO 출력 ✅ 첫 번째 시도 - 실패 # 파이썬에서 사용자로부터 정수를 입력받아 변수 T에 할당하는 코드 # 예를 들어 사용자가 3을 입력하면 T는 3이 됨 T = int(input()) # () 괄호 한 쌍 딕셔너리 방식으로 지정 # key ')', value '(' pair = {')': '('} for i in range(T): # T번 for문 돌림 stack = [] # 괄호를 담아둘 리스트 s=input() #T가 3이라면 문자열을 세번 입력받아 s에 할당 for char in s: # pair의 key값에 해당하는게 없을 경우(열림 괄호일 경우..

[Leetcode] 20. Valid Parentheses

✅ 문제 - 유효한 괄호 이 문제는 s의 괄호 짝이 맞는 경우 true, 맞지 않는 경우 false 반환하는 문제이다. ✅ 풀이 코드 이 문제는 전형적인 스택 구조이다. 예를 들어, s가 {[]} 라면 [ 가 나중에 들어갔기 때문에 ] 가 먼저 나와야하고, 그다음에 처음 들어간 { 에 맞는 } 가 나와야 한다. 방법1) class Solution: def isValid(self, s: str) -> bool: # 괄호 짝 dict로 만들기(key-value) pair = { ')' : '(', '}' : '{', ']' : '[', } #opener를 담을 리스트 stack = [] opener = "({[" for item in s: # opener는 stack에 넣기 if item in opener:..

[Leetcode] 15. 3Sum

✅ 문제 - 세 수의 합💡 숫자로 이루어진 리스트의 값 3개를 더했을 때 0이 되는 세 수를 구하는 문제 ✅ 첫 번째 시도 - 런타임 초과class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: results = [] nums.sort() #i,j,k 세 수의 합 for i in range(len(nums)-2): # 중복값 제외 if i>0 and nums[i] == nums[i-1]: continue for j in range(i+1, len(nums)-1): if j > i+1 and nums[j] == nums[j-1]: continue for k in range(j+1, len(nums)): if k > j+1 and num..

[Leetcode] 5. Longest Palindromic Substring

✅ 문제 - 가장 긴 팰린드롬 부분 문자열 구하기💡 팰린드롬이란? 토마토 기러기 스위스처럼 앞으로 읽어도 거꾸로 읽어도 같은 문자열을 지닌 단어를 말한다. 주어진 문자열 s에서 앞뒤가 똑같은 문자열을 추출하여 가장 긴 것만 반환하는 것이 이 문제의 포인트이다. 주어진 문자열의 길이가 짝수인 경우 연달아 겹쳐있는 문자도 팰린드롬에 포함된다. ✅ 첫 번째 시도 - 실패class Solution: def longestPalindrome(self, s: str) -> str: #한 글자일 경우, s를 뒤집었을 때 s와 같은 경우 s 그대로 반환 if len(s) == 1 or s == s[::-1]: return s #팰린드롬 담을 리스트 선언 p_list = [] for i in range(len(s)): f..

[Leetcode] 49. Group Anagrams

✅ 문제 - 그룹 애너그램 💡 애너그램이란? 문자를 재배열하여 다른 단어로 바꾸는 것이다. 예를들어 eat의 경우 eat, ate, tea 등으로 바꿀 수 있다. 이 문제는 주어진 문자열을 이용하여 동일한 문자를 지닌 문자열들을 그룹핑해서 반환하여야 한다. ✅ 풀이 코드from typing import List import collections class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: #기본적으로 빈 리스트를 값으로 가지는 딕셔너리 anagrams = collections.defaultdict(list) #str 리스트 요소에 대해 반복 #단어를 정렬, 해당 단어를 키로 하여 word를 추가함 for word..

[Leetcode] 561. Array Partition

✅ 문제 - 배열 파티션 💡 문제 포인트 숫자 배열 nums를 2개씩 파티셔닝 해서, 그룹별 최솟값을 더했을 때 합이 가장 큰 경우 그 합을 반환 nums는 짝수 개수로 이루어져 있음 ✅ 나의 코드 💡 나의 Point 1. 리스트 오름차순 정렬 2. 2개씩 파티셔닝 한다고 쳤을 때 오름차순 되어 있기 때문에 파티션 중 첫 번째 값(최솟값)끼리 더하면 합이 최대로 나옴 3. 리스트 인덱스가 0, 2, 4, 6인 경우끼리 더해주기 class Solution: def arrayPairSum(self, nums: List[int]) -> int: nums.sort() sum=0 for i in range(0, len(nums), 2): sum += nums[i] return sum 파이썬에서 for문 돌릴 때 ..

[프로그래머스][PCCE 기출문제] 10번 / 데이터 분석 - 250121

문제 설명 제한사항 입출력 예 나의 풀이 굉장히 지저분한 내 코드,,, 다른 사람들 풀이 보고 눈물 한 방울 또르륵,,, 내가 접근했던 방식은 1. ext 키워드에 따라 answer 배열의 길이 선언을 위한 조건식(count를 변수로 둠) 2. 배열 선언 후, val_ext보다 작은 경우만 answer 배열에 복사(index가 다르기 때문에 answerIndex 변수 새로 지정) 3. 오름차순 정렬(Comparator 이용) import java.util.Arrays; import java.util.Comparator; class Solution { public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) { int co..

[프로그래머스][Lv.1] 숫자 문자열과 영단어 - 81301

문제 설명 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 제한사항 1 ≤ s의 길이 ≤ 50 s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니..

[프로그래머스][Lv.1] 자연수 뒤집어 배열로 만들기 - 12932

문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 첫 번째 시도 class Solution { public int[] solution(long n) { String str = Long.toString(n); int[] answer = new int[str.length()]; for(int i = str.length(); i>0; i--){ answer[str.length()-i]= str.charAt(i-1); } return answer; } } 이클립스에서 코드 실행해서 로그 찍어 봤을 땐 분명 [5, 4, 3, 2, 1]로 나..