C#/알고리즘 17

17. 1038번 감소하는 수

1174번: 줄어드는 숫자 음이 아닌 정수를 십진법으로 표기했을 때, 왼쪽에서부터 자리수가 감소할 때, 그 수를 줄어드는 숫자라고 한다. 예를 들어, 321와 950은 줄어드는 숫자이고, 322와 958은 아니다. N번째로 작은 줄어� www.acmicpc.net 문제를 이해 못해서 구글갓의 힘을 빌림.. -1이 왜 출력되어야 하는지 이해가 안갔는데 가장 큰값이 9876543210 이고 이때 N은 1023임 따라서 1023 보다 큰 값이 입력되면 무조건 -1이 출력되어야함 예제는 0만 나와 있고 0 다음엔 10, 20, 21인줄 알았는데 0 다음엔 1,2,...8,9,10,20,21 이란다.. 1~9도 줄어드는 숫자였음 아무튼 숫자가 0,1,2,3,....9,10,20,21,30,31,32,40....9..

C#/알고리즘 2020.09.06

16. 2805번 나무 자르기

2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M을 www.acmicpc.net 이분탐색 문제 [알고리즘] 이분 탐색 이분 탐색 탐색 기법중에 하나로 원하는 탐색범위를 두 부분으로 분할해서 찾는 방식입니다. 그렇기에 원래의 전부를 탐색하는 탐색 속도에 비해 빠릅니다. 이분 탐색을 하는 방법은 left , right wootool.tistory.com 나무를 입력받고 left(0), right(나무 중 최대 길이값), mid(왼쪽, 오른쪽 평균값) 을 구해준 뒤 평균값으로 나무들을 다 자름 1. 자른 나..

C#/알고리즘 2020.09.06

15. 8980번 택배

8980번: 택배 입력의 첫 줄은 마을 수 N과 트럭의 용량 C가 빈칸을 사이에 두고 주어진다. N은 2이상 2,000이하 정수이고, C는 1이상 10,000이하 정수이다. 다음 줄에, 보내는 박스 정보의 개수 M이 주어진다. M은 1이 www.acmicpc.net 그리디 알고리즘을 이용하는 문제임 접근하는 방법은 알았는데 구현이 어려웠다. 받는 마을 기준으로 오름차순으로 입력받는 주문리스트를 정리한다 (가장 가까운 순서대로) 거기서 가까운 도착할 마을 순서대로 박스를 많이 담아둔다. (가장 가까운 도착마을 것을 가장 많이!) 다음 출발 마을에 도착했을 때 수용량이 박스양보다 많다면 그냥 담고 적다면 남은 수용량 만큼만 담는다 수용량만큼 값을 더한게 답 인데 처음에 짠 코드는 3%만에 틀려버림 이거저거 ..

C#/알고리즘 2020.09.05

14. 4963번 섬의 개수

4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도� www.acmicpc.net 2차원 배열을 써서 풀었음 배열에 값을 넣고 8방향으로 탐색하는 게 어려워서 검색해봤더니 그래프, DFS, BFS 문제라고 한다. 그래프는 연결되어 있는 객체 간의 관계를 표현할 수 있는 자료구조로 여려개의 고립된 부분 그래프로 구성될 수 있다. 트리와 다르게 루트, 노드의 개념이 없다. 일반적으로 DFS, BFS 로 탐색한다. DFS(Depth First Search - 깊이 우선 방식)으로 Stack 구조나 재귀함수를 사용하여 구현 -> 모든 노드 방..

C#/알고리즘 2020.09.05

13. 1967번 트리의 지름

재귀 호출 이용해서 문제 푸는데 자식이 2개 이상일 때 뭘 해도 답이 이상하게 나와서 블로그 참고 했습니다 백준# 1967 - 트리의 지름 https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n번째 줄까지 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의.. programming-mr.tistory.com 감사감사 using System; using System.Collections.Generic; using System.ComponentModel.Design; using System.Linq; using System.Runtime.CompilerServices; usi..

C#/알고리즘 2020.07.26

12. 1074번 Z (시간 줄임)

수행시간이 너무 오래걸려서 시간을 줄임 먼저 코드는 일일이 다 찾아보고 카운트를 증가시켰다면 이번엔 위치를 먼저 찾고 값을 구함 코드 길이는 좀 더 늘어났지만 시간은 대폭 줄일 수 있었음 위치를 찾고 나서 값을 구하는 게 어려웠다.. 어떻게 다시 재귀호출 할 것인지 매개변수를 설정해주는 게 어려웠음 using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; namespace _1074 { clas..

C#/알고리즘 2020.07.11

11. 2504번 괄호의 값 (해결)

괄호가 먼저 올바른지 따지고 맞으면 괄호 값을 계산함 짝이 맞는 괄호 차례가 오면 괄호를 지우고 해당하는 숫자를 스택에 넣고 다음 차례에 숫자가 오면 int 변수(num)를 만들어서 짝이 맞는 괄호가 올때까지 지워가면서 변수에 넣어줌 foreach를 돌 때마다 num이 0이 아니면 값을 스택에 넣어주고 초기화한다 짝이 맞는 차례가 오면 변수에 x2나 x3을 해줌 그리고 스택에 쌓여있는 숫자들을 한번에 더해서 출력해줌 아무튼 극혐 using System; using System.Collections.Generic; namespace _2504 { class Program { static void Main(string[] args) { string input = Console.ReadLine(); Brack..

C#/알고리즘 2020.06.22

10. 10845번 큐 (해결)

20트.. 해결 방법 1. 출력할 때 string 형 변수에 + \n으로 한번에 집어넣고 마지막에 한번 출력한다. -> 문제에는 명령이 주어질 때마다 한줄에 하나씩 출력하라고 하는데 그러면 시간초과.. 2. string으로 큐를 만든다. -> 문제에는 정수를 저장하는 큐라고 나와있지만 string으로 큐를 만든다 그리고 정수변환을 하지 않고 큐에 넣음 Int.Parse()가 시간이 오래 걸리나봄?? 출력만 한번에 하면 될 줄 알았는데 계속 시간초과 떠서 정수변환을 안했더니 통과했당.. 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 37 38 39 40 41 42 43 44 4..

C#/알고리즘 2020.06.21

9. 1302번 베스트셀러 (LINQ group by)

첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다. count랑 temp값을 만들어서 중복값 중에 가장 많은 갯수를 가진 값을 찾아보는 방법으로 해보다가 LINQ를 이용하는 방법을 찾아봄 var group = bookList.GroupBy(x => x) .Select(g => new { Value = g.Key, Count = g.Count() }) .OrderBy(x => x.Value); LINQ를 사용하면 데이터들을 group by를 이용해서 두 그룹으로 나눌 수 있는데 (group by into) LINQ의 확장메서드를 이용해서 바로 group by하고 그 값을 처리할 수 있다고 한다. select는 검색된 값..

C#/알고리즘 2020.06.07

8. 1343번 폴리오미노

먼저 그리디 알고리즘을 알아보았다. 지금 할 수 있는 단계에서 최선의 해결책을 얻는 알고리즘이라고 한다. 동전 나누는게 예로 많이 나왔는데 만약 560원이 있다면 가장 적은 동전 갯수인 500원짜리 1개 50원짜리 1개 10원짜리 1개로 나눌 수 있고 이게 그리디 알고리즘을 적용하여 그때그때 최선의 결과로 나타내는 것이라고 한다. 여기 문제에 적용하면 먼저 보드를 4로 나눠서 4의 배수인지 확인해보고 A를 채우고 아니라면 4로 나눈 나머지가 2의 배수인지 확인해서 2의 배수라면 A를 먼저 채운다음 B를 채우면 되는 것이고 2의 배수도 아니라면 -1을 출력해주면 되는 것 같았다. 입력되는 문자열을 .을 기준으로 나누고 A랑 B를 X개수만큼 각각 잘 대체했다 .을 도대체 어떻게 나타낼까 엄청 고민하다가 su..

C#/알고리즘 2020.06.01