반응형

기초 공부 (언어 및 알고리즘)/알고리즘 (C언어) 41

[프로그래머스/Java] 소수 찾기(완전탐색 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 완전 탐색 문제 중 하나인 소수 찾기 문제를 Java로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  이 문제는 완전탐색을 하면서 조건을 확인하는 것보다는 완전탐색을 할 수 있도록 모든 경우를 만드는 것이 관건인 문제였다. 사실 소수인지 아닌지 판단하는 건 간단하다. 아래 코드에 is_prime() 함수가 작성된 것처럼, 2 이상의 수로 자기 자신 외에 나눠지는 수가 하나라도 있으면 소수가 아니므로, 이를 파악해주기만 하면 된다. whil..

[프로그래머스/Java] 프로세스(스택/큐) 풀이

알고리즘 고득점 Kit의 스택&큐 문제 중 하나인 '프로세스'를 자바로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   우선 큐를 만들어서 인덱스를 모두 넣어주는 것으로 풀이를 시작했다. 그다음, 현재 남아있는 인덱스 중 최댓값을 찾는 것으로 초기 설정을 마쳤다. 그다음 while문을 통해서, 현재 poll 된 인덱스의 priority 값이 최댓값이 아니면 다시 넣어주고, 최댓값이라면 poll 된 채로 두고, cur_max를 그다음 max 값으로 바꾸는 작업을 반복한다. 현재..

[프로그래머스/C언어] 완전 범죄, DP로 풀이

2025 프로그래머스 코드 챌린지 2차 예선에 출제되었던 문제인 '완전 범죄'를 동적계획법(DP, Dynamic Programming)을 이용해서 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/389480 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  오랜만에 DP 문제를 풀다 보니 조금 헤매기도 했는데, 과거에 풀었던 백준 문제와 유사했기 때문에 점화식을 약간 참고해서 풀이하니 금방 해결할 수 있었다. 참고했던 백준 문제는 아래와 같다.https://programming-diary-ina.tistory.com/37 [백준 1286..

[프로그래머스 / C언어] 지게차와 크레인 BFS로 풀기

프로그래머스 코딩테스트 문제 중, 지게차와 크레인 문제를 BFS를 활용해서 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/388353 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  BFS와 구현에 대한 설명은, 아래 내 블로그 글을 통해 확인할 수 있다.https://programming-diary-ina.tistory.com/30 [백준 1260번/C언어] DFS와 BFS, Queue로 풀이백준 1260번 문제를 큐(Queue)로 풀어보았습니다. 백준 1260번: https://www.acmicpc.net/problem/1260 ..

[프로그래머스 / C언어] 서버 증설 횟수

프로그래머스 서버 증설 횟수 문제를 C언어로 풀어보았다.https://school.programmers.co.kr/learn/courses/30/lessons/389479 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  어렵지 않은 문제이므로, 간단한 로직만 기록하려 한다.servers 배열에, 각 시간대(index) 별로 증설된 서버 개수를 저장한다. cur_server은 현재 운영 중인 서버의 개수이다. 사용자의 수를 담은 players 배열을 순회하며, 현재 서버가 감당할 수 있는 사용자 수(cur_server * m) 이상의 사용자가 있는 경우 서버를 증설해 준다. 또한, 증설된 서버의 지속 시..

[프로그래머스 / C언어] 코딩테스트 '괄호 회전하기' 문제

프로그래머스 코딩테스트 연습 문제 중 '괄호 회전하기' 문제를 풀어보았다.https://school.programmers.co.kr/learn/courses/30/lessons/76502# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  비슷한 문제를 예전에 풀었던 기억이 있는데, 아마 괄호 회전하기가 아니라 그냥 괄호가 올바른지 확인하는 문제였던 것 같다. 비슷한 문제를 쉽게 풀었던 기억이 있어 문제 풀이를 업로드하지 않으려 했으나, 간과했던 부분이 있어 올리게 되었다.  처음에는 stack을 사용하지 않고, 크기가 3인 int array를 선언해서, 각각의 닫는 괄호가 여는 괄호보다 먼저 나오지 않..

[프로그래머스/C언어] 연속 부분 수열

프로그래머스 코딩테스트 연습 문제 중, 연속 부분 수열 문제를 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해당 문제는 주어진 수열이 끝과 처음이 다시 연결된 수열이라고 가정하고, 부분 수열의 합 중 중복되지 않는 것의 개수를 구하는 문제이다. 조금이라도 더 간단한 방법을 찾으려 했지만, 결국 모든 경우를 다 구하고 중복을 확인하는 수밖에 없다. 그래도 합을 구하는 과정이라도 좀 더 간단하게 하고자, 크기가 n인 부분 수열의 합을 구하기 위해 크기가 n-1인 부분 수열의 합..

[프로그래머스 / C언어] 가장 많이 받은 선물

https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 프로그래머스 코딩테스트 Lv.1 문제인 '가장 많이 받은 선물' 문제를 풀어보았다. 질문에는 Lv.1 문제가 아닌 것 같다는 말이 나오고 Lv.1 문제에서 정답률도 가장 낮을 정도로 복잡해 보이나, 사실 크게 복잡한 알고리즘이나 자료구조가 필요한 영역은 아니다.문제를 풀 당시, 알고리즘 관련 대회를 준비 중에 있어 사소한 공간복잡도보다는 시간복잡도와 빠른 코드 작성에 초점을 맞춰 작성하였다. (malloc 사용 대신 제한된 최대 크기의 배열을..

[프로그래머스 / C언어] 햄버거 만들기

프로그래머스 코딩테스트 연습 문제인, 햄버거 만들기 문제를 풀어보았습니다.https://school.programmers.co.kr/learn/courses/30/lessons/133502# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr stack의 개념을 알고 있으면 쉽게 풀 수 있는 문제입니다. 다만, c언어에는 스택이 구현되어 있지 않기 때문에, 저는 그냥 top 변수 하나와 일반 int 배열을 활용하여 스택처럼 활용해주었습니다. 이 문제는 문제에서 힌트를 얻으면 더 쉽게 접근이 가능한 문제입니다. 문제에서 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장하..

[백주 2805번/C언어] 나무 자르기

백준 2805번 문제를 merge sort (합병 정렬)을 이용하여 풀어보았습니다. 백준 2805번: https://www.acmicpc.net/problem/2805  문제 내용은 아래와 같습니다.     이 문제는 여러 번의 시간초과를 겪은 끝에 성공했는데, 처음 몇 번 시도가 모두 O(n^2)의 시간복잡도를 가진 코드여서 이를 개선하려는 노력을 많이 했다. 결국 O(NlogN)의 시간복잡도를 가진 merge sort를 활용하여 문제를 해결할 수 있었다.  나무의 개수인 N과 필요한 총 나무의 길이인 M이 터미널 입력으로 주어지면, 자를 수 있는 최대 나무의 높이를 구해서 출력하면 된다. 여기서 자를 수 있는 최대 나무의 높이라는 것은, 해당 높이를 초과하는 길이의 합이 M이상이 되는 최대 높이를 말..

728x90
반응형