본문 바로가기

Algorithm38

[C++,구현] 백준 1764번 듣보잡 문제풀이, 배열,vector,map 속도비교 문제링크 백준 1764번 듣보잡 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 영어 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다. www.acmicpc.net 간단한 문제열 처리문제를 가지고 흔히 알고리즘에서 사용하는 단순 배열, STL vector, STL map을 써서 다양한 방법으로 문제를 풀어보고 속도차이를 비교해보려 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #in.. 2019. 3. 26.
[C++,구현] 백준 14499번 주사위 굴리기 문제풀이 문제링크 백준 14499번 주사위 굴리기 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마 www.acmicpc.net 구현문제를 풀어보았다. 구현문제가 익숙치 않아 코드도 길고 복잡하게 짜버렸다ㅜㅜ 다른분들의 코드를 보면서 최적화 시켜야겠다. 1 2 3 4 5 6 7 8 .. 2019. 3. 14.
[C,C++] 지역변수와 전역변수 특징,백준 1463번 1로 만들기 풀이 문제 링크 백준 1463번 1로 만들기 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 1로 만들기는 지난번에 풀이한 적이 있지만 한번 복습하는겸 다시 풀기로 했다. C언어 문법으로 갈아타고 여기저기 주운 지식을 이용해 다시 코드를 작성하니 확실히 깔끔해졌다. 또한 유명코더분들이 배열을 만들때 전역변수로 만드는 경우가 많았는데 오늘 이문제를 다시 풀어보며 차이점을 포스팅하기로 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 #include int n,dp[1000001]; int main(){ scanf("%d",&n); for(int i=0;idp[i/3]+1?dp[i]=dp[i/3]+1:dp[i]; dp[i.. 2019. 3. 11.
[C++,DP] 백준 2294번 동전2 문제풀이 문제링크 백준 2294번 동전2 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어질 수도 있다. www.acmicpc.net DP문제를 하나 더 풀어보았다. 어려운 듯하면서 쉬운 듯 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include #include #include #include using namespace std; int main(){ int N,K; cin.. 2019. 3. 8.
[C++,DP] 백준 9465번 스티커 문제풀이 문제 링크 백준 9465번 스티커 9465번: 스티커 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다. 모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점 www.acmicpc.net "1로 만들기"와 같은 유형의 DP 문제이다. 처음에 in-place로 알고리즘을 짜려다 꼬여서 자꾸 오답이 나오길래 각설하고 그냥 따로 배열을 하나 더 만들어서 짜서 A.. 2019. 3. 4.
[C++,DP] 백준 1463번 1로 만들기 문제풀이, DP와 분할정복의 특징 문제링크 백준 1463번 1로 만들기 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 다시 복습하는 DP문제이다. 다시 DP 개념부터 집고 넘어가야겠다. DP(Dynanic Programing)란? 주어진 문제를 여러 개의 부분 문제들로 나누어 푼 다음, 그 결과들로 큰 문제를 푸는 방법을 말하며 여기서 DP의 Dynanic은 개발자가 아무 의미없이 붙인 거라고 한다... 큰 문제를 해결하기 쉽게 여러 개의 쉬운 부분 문제들을 풀어 해결하는 방법 정도로만 이해하면 될 것 같다. 분할정복이랑 비슷한 개념이기는 하나 분할정복은 문제를 분할했을 때 겹치는 문제가 발생하지 않지만, DP는 겹치는 문제가 발생하기 때문에 메모이제이션.. 2019. 2. 26.
[C++] 백준 2309번 일곱난장이 문제풀이 문제 링크 백준 2309번 일곱난장이 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net DP관련 문제인 줄 알았더니 알고보니 짐승공격 문제였다. ㅎㅎㅎ 항상 9개가 입력되고 7개의 답안이 출력된다는 점에 착안해서 9개 중에 골라낼 가짓수 2개를 모두 하나하나 대입하여 제외하고 나머지 7개의 합이 100이 되는지 판단하는 문제이다. vector와 sort함수를 이용하였다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 .. 2019. 2. 14.
[C++] 백준 1181번 단어정렬 문제풀이 문제 링크 백준 1181번 단어정렬 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 간단한 심화 정렬 문제이다. string으로 단어를 받고 sort 함수를 이용해 정렬을 하는데 compare 함수를 따로 길이순으로 반환을 한 후에 길이가 같다면 알바벳순으로 오름자순 정렬을 하는 형식이다. string size 함수를 이용해 길이를 파악하고 길이가 같다면 단순 비교를 통해 함수를 만들었다. 정렬을 공부하는 사람이라면 도움이 많이 될 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .. 2019. 1. 24.
[C++] 코드그라운드 버스타기 문제풀이 버스타기 N 명의 바둑 선수들이 몇 대의 버스에 나누어 타려고 한다. 선수들은 1부터 N까지 번호가 붙어 있다. 각 선수는 실력 값을 가지고 있다. 선수 i번의 실력 값을 Ai라고 하자. 선수들 간의 경쟁심 때문에 두 선수의 실력 차이가 K이하인 경우는 같은 버스에 타지 않는다고 한다. 즉, 두 선수 i번과 j번의 (i≠j) 실력이 |Ai−Aj|≤K를 만족하는 경우 같은 버스에 타지 않는 것이다. 한 대의 버스에 탈 수 있는 인원은 무제한이라고 한다. 철수는 선수들의 실력을 입력으로 받아서 필요한 버스 수의 최소값을 계산하려고 한다. 여러 선수들이 서로 같은 버스를 타지 않는 관계가 매우 복잡해 보이지만, 철수는 아주 간단한 계산 방법이 있다는 것을 알게 되었다. 철수를 도와서 버스 수의 최소값을 계산하.. 2019. 1. 10.
[C++] 코드그라운드 숫자골라내기 문제풀이 숫자 골라내기초등학교교 학생인 정우와 석환이는 최근 학교에서 두 이진수의 XOR 연산에 대해 배웠다. 둘은 매우 영특한 학생이라 새로 배운 연산을 갖고 이리저리 장난치기 시작했다. 다만 석환이는 정우에게 일을 시키는 것을 좋아하는지라 다음과 같은 제안을 했다. “내가 N개의 10진수를 주면, 등장하는 숫자들 중 홀수번만 나타나는 숫자들을 모두 XOR한 결과를 구해줘.” 예를 들어 '2, 5, 3, 3' 이 주어질 경우, '2'와'5'는 1번(홀수 번) 나타나고 '3' 은 2번 (짝수 번) 나타나므로 홀수 번 나타난 '2' 와 '5'를 XOR 한 결과를 구해야 하고, '2, 5, 3, 3, 2, 4, 5, 3' 이 주어질 경우 '2' 와 '5' 는 2번 나타나고, '3' 은 3번, '4' 는 1번 나타나므.. 2018. 9. 19.
[C++] 프로그래머스 가운데 글자 가져오기 문제풀이 가운데 글자 가져오기 문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 제한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s return abcde c qwer we 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include #include using namespace std; string solution(string s) { string answer = ""; string a=s; if(s.length()%2==0){ answer.push_back(a[s.length()/2-1]); answer.push_back(a[s.length()/2]); } else answ.. 2018. 9. 2.
[C,C++] 1,2차원 배열 원소 선언, 정적 동적 전체 초기화 문제를 풀다 C와 C++의 1,2차원 배열 선언 초기화가 동적,정적에 따라서도 완전달라 포스팅을 해보려 한다. C 1차원 배열 정적,동적 초기화 C 2차원 배열 정적,동적 초기화 C++ 1차원 배열 정적,동적 초기화 C++ 2차원 배열 정적,동적 초기화 순으로 진행된다. 먼저 C 1차원 배열 정적 초기화의 경우 일반적인 배열 초기화는 다들 알걸로 생각한다. 1 2 3 4 5 6 7 //int형의 5개 배열을 초기화 int arr[5]={5,9,3,4,2}; //개수를 생략해도 무방하다. int arr[]={5,9,3,4,2}; cs 1 int arr[5]={6,} cs 이렇게 하면 모두 6으로 초기화 된다는 포스팅이 많은데 그렇지 않다. 6 0 0 0 0이렇게 될뿐이다. 한번에 초기화하는 법은 찾아서 업.. 2018. 8. 23.