본문 바로가기

전체 글34

2751. Robot Collisions 문제 요약:  Input:positions = [5,4,3,2,1], healths = [2,17,9,15,10], directions = "RRRRR" Output:[2,17,9,15,10] 각 로봇들의 위치, 체력, 방향을 알려주고 로봇이 방향대로 이동하면서 충돌하면 두가지 분기로 나뉜다1.  체력이 같으면 둘다 파괴된다2. 한쪽 체력이 높은 경우, 낮은쪽이 파괴되고 높은쪽의 체력은 -1이 된다충돌이 전부 진행되었을때 남은 로봇들의 체력을 반환하라  풀이 과정: 이전 문제의 연장선이라고 생각해 스택과 정렬을 이용하기로 했다 positions와 healths와 directions를 pair로 묶어서 vector>> 형식으로 만들어서 positions를 기준으로 healths와 directions를 정렬.. 2024. 7. 14.
1717. Maximum Score From Removing Substrings 문제 요약:Input: s, x, ys - 문자열,x - s로부터 문자열 "ab"를 지우면 얻는 점수y - s로부터 문자열 "ba"를 지우면 얻는 점수Output:문자열 "ab", "ba"를 지우고 얻은 점수의 총 합풀이 과정: 저번 문제에서 stack을 통해 풀기도 해서 자료구조로는 stack 이 먼저 떠올랐지만 문제가 쉬워 보여서 처음 보았을 때는 그냥 "aba", "bab" 이것만 조심해서 점수 크기에 따라 문자열 순회 방향을 다르게 하면 되겠지 싶었는데 생각보다 여러 예외 케이스들이 많이 나오는 문제였다이 문제를 보자마자 O(n)이 가능할 것 같은 느낌적인 느낌을 받았고 x, y 중 큰 점수를 먼저 처리하는 greedy알고리즘을 사용해야겠다는 생각이 들었다한 번의 순회로 모든 상황을 끝내고 싶었으.. 2024. 7. 13.
1190. Reverse Substrings Between Each Pair of Parentheses 문제 요약:괄호가 들어있는 문자열을 인자로 받아 괄호안에 있는 문자열을 뒤집으며 괄호를 제거한 문자열을 반환   Input: "(ed(et(oc))el)"Output: "leetcode"  처음에는 보자마자 재귀가 떠올랐지만 재귀는 디버깅 + 가독성 최악이기에 빠르게 머릿속에서 지워버렸다문제가 요구하는 바가 굉장히 단순했기에 O(N)을 상정하며 생각해낸 방식은 Two Pointer 방식을 사용하는 것이었다각 포인터의 괄호 depth를 구하여(괄호안의 괄호안의 문자열은 뒤집히고 또 뒤집히면 사실 안뒤집힌거나 다름없기에) depth가 홀수면 뒤집고 짝수면 안뒤집는다는 가정을 통해 반환할 문자열의 앞과 뒤에 붙여주는 것이다    문자열 하나로만 진행을하면 a(b(c)d)e 와 같은 입력값을 받은 상황에서 b와.. 2024. 7. 12.
pthread_exit() 와 pthread_join() 간의 data race 과제를 하던 도중 구현은 끝났으나 끝없는 data race를 만나게 되어 모든 작업을 초기화할 수밖에 없었다그렇게 스레드를 생성하고 종료하고 그 값을 확인하는 간단한 작업을 진행 중에 data race 가 발생했다그냥 그 어떤 추가적인 작업 없이 스레드를 생성하고 바로 종료하고 확인하는 과정에서부터 data race의 발생을 보고 너무 어이가 없어 valgrind의 내역을 자세히 살펴보면서 이 글을 작성하게 되어있다 문제가 되는 코드는 다음과 같다void *thread_working(void *arg){ return (NULL);}int main(void){ pthread_t thread; pthread_create(&thread, NULL, thread_working, NULL); pthread_jo.. 2024. 6. 5.