본문 바로가기
Dart/Algorithms

Dart 알고리즘 100제

by Maccrey Coding 2024. 7. 21.
반응형

1. 배열과 리스트 (Arrays and Lists)

1. 리스트의 평균 구하기: 주어진 리스트의 평균을 계산하여 출력하세요.

List<int> numbers = [1, 2, 3, 4, 5];

 

2. 리스트의 모든 요소 더하기: 주어진 리스트의 모든 요소를 더하여 출력하세요.

List<int> numbers = [10, 20, 30];

 

3. 리스트에서 특정 값 찾기: 주어진 리스트에서 특정 값이 존재하는지 확인하여 출력하세요.

List<int> numbers = [5, 10, 15, 20];
int value = 15;

 

4. 리스트에서 최대값 찾기: 주어진 리스트에서 최대값을 찾아 출력하세요.

List<int> numbers = [7, 22, 5, 18];

 

5. 리스트 정렬하기: 주어진 리스트를 오름차순으로 정렬하여 출력하세요.

List<int> numbers = [34, 7, 23, 32];

 

6. 리스트에서 중복 값 제거하기: 주어진 리스트에서 중복된 값을 제거하여 출력하세요.

List<int> numbers = [1, 2, 2, 3, 4, 4];

 

7. 리스트의 짝수만 추출하기: 주어진 리스트에서 짝수만 추출하여 새로운 리스트를 만드세요.

List<int> numbers = [1, 2, 3, 4, 5, 6];

 

8. 리스트의 모든 요소를 제곱하기: 주어진 리스트의 모든 요소를 제곱하여 새로운 리스트를 만드세요.

List<int> numbers = [1, 2, 3];

 

9. 리스트의 합 구하기: 주어진 리스트의 요소 합을 구하여 출력하세요.

List<int> numbers = [5, 10, 15];

 

10. 리스트의 최대값과 최소값 구하기: 주어진 리스트에서 최대값과 최소값을 찾아 출력하세요.

List<int> numbers = [10, 5, 8, 20];

 

2. 문자열 (Strings)

11. 문자열 길이 구하기: 주어진 문자열의 길이를 출력하세요.

String text = "Hello, Dart!";

 

12 .문자열 대문자로 변환하기: 주어진 문자열을 모두 대문자로 변환하여 출력하세요.

String text = "hello";

 

13. 문자열에서 특정 문자 찾기: 주어진 문자열에서 특정 문자의 인덱스를 찾아 출력하세요.

String text = "Hello, Dart!";
String charToFind = "D";

 

14. 문자열 연결하기: 두 개의 문자열을 연결하여 출력하세요.

String str1 = "Hello";
String str2 = "World";

 

15. 문자열에서 부분 문자열 추출하기: 주어진 문자열에서 특정 부분 문자열을 추출하여 출력하세요.

String text = "Hello, Dart!";
int start = 7;
int end = 11;

 

16. 문자열에서 공백 제거하기: 주어진 문자열의 양쪽 공백을 제거하여 출력하세요.

String text = "  Hello, Dart!  ";

 

17. 문자열을 배열로 변환하기: 주어진 문자열을 문자 배열로 변환하여 출력하세요.

String text = "Hello";

 

18.문자열의 문자 수 세기: 주어진 문자열에서 특정 문자의 개수를 세어 출력하세요.

String text = "hello world";
String charToCount = "o";

 

19. 문자열의 특정 문자 제거하기: 주어진 문자열에서 특정 문자를 제거하여 출력하세요.

String text = "hello world";
String charToRemove = "o";

 

20. 문자열에서 단어 수 세기: 주어진 문자열에서 단어의 개수를 세어 출력하세요.

String text = "Hello world Dart programming";

 

3. 수학 및 계산 (Mathematics and Calculations)

21. 숫자의 제곱 구하기: 주어진 숫자의 제곱을 계산하여 출력하세요.

int number = 5;

 

22. 주어진 숫자의 팩토리얼 계산하기: 주어진 숫자의 팩토리얼을 계산하여 출력하세요.

int number = 5;

 

23. 주어진 숫자의 제곱근 구하기: 주어진 숫자의 제곱근을 계산하여 출력하세요.

int number = 16;

 

24. 주어진 두 숫자의 최대 공약수(GCD) 구하기: 두 개의 숫자에서 최대 공약수를 구하여 출력하세요.

int a = 48;
int b = 18;

 

25. 주어진 두 숫자의 최소 공배수(LCM) 구하기: 두 개의 숫자에서 최소 공배수를 구하여 출력하세요.

int a = 12;
int b = 15;

 

26. 피보나치 수열 계산하기: 주어진 숫자까지의 피보나치 수열을 출력하세요.

int n = 10;

 

27. 소수 판별하기: 주어진 숫자가 소수인지 판별하여 출력하세요.

int number = 29;

 

28. 숫자 배열의 중간값 구하기: 주어진 숫자 배열의 중간값을 계산하여 출력하세요.

List<int> numbers = [3, 5, 7, 9];

 

29. 주어진 숫자 범위의 합 구하기: 두 숫자 사이의 합을 계산하여 출력하세요.

int start = 1;
int end = 10;

 

30. 소수의 목록 구하기: 1부터 주어진 숫자까지의 소수를 목록으로 출력하세요.

int limit = 50;

 

4. 정렬 및 탐색 (Sorting and Searching)

31. 버블 정렬 구현하기: 주어진 배열을 버블 정렬로 정렬하여 출력하세요.

List<int> numbers = [64, 25, 12, 22, 11];

 

32. 삽입 정렬 구현하기: 주어진 배열을 삽입 정렬로 정렬하여 출력하세요.

List<int> numbers = [12, 11, 13, 5, 6];

 

33. 선택 정렬 구현하기: 주어진 배열을 선택 정렬로 정렬하여 출력하세요.

List<int> numbers = [29, 10, 14, 37, 13];

 

34. 이진 탐색 구현하기: 정렬된 배열에서 특정 값을 이진 탐색으로 찾아서 인덱스를 출력하세요.

List<int> numbers = [1, 3, 5, 7, 9, 11];
int target = 7;

 

35. 순차 탐색 구현하기: 주어진 배열에서 특정 값을 순차 탐색으로 찾아서 인덱스를 출력하세요.

List<int> numbers = [10, 20, 30, 40, 50];
int target = 30;

 

36. 정렬된 배열에서 두 수의 합이 특정 값이 되는지 확인하기: 정렬된 배열에서 두 수의 합이 특정 값이 되는지 확인하여 출력하세요.

List<int> numbers = [1, 2, 3, 4, 5, 6];
int targetSum = 10;

 

37. 배열에서 두 수의 차가 특정 값이 되는지 확인하기: 배열에서 두 수의 차가 특정 값이 되는지 확인하여 출력하세요.

List<int> numbers = [10, 15, 20, 25];
int targetDifference = 5;

 

38. 정렬된 배열에서 중복된 요소 찾기: 정렬된 배열에서 중복된 요소를 찾아 출력하세요.

List<int> numbers = [1, 2, 2, 3, 4, 4, 5];

 

39. 주어진 배열에서 k번째 최소값 찾기: 주어진 배열에서 k번째 최소값을 찾아 출력하세요.

List<int> numbers = [10, 4, 7, 1, 5];
int k = 2;

 

40. 배열에서 k번째 최대값 찾기: 주어진 배열에서 k번째 최대값을 찾아 출력하세요.

List<int> numbers = [10, 20, 4, 45, 99];
int k = 3;

 

5. 재귀 및 백트래킹 (Recursion and Backtracking)

41. 팩토리얼 계산하기 (재귀적): 주어진 숫자의 팩토리얼을 재귀적으로 계산하여 출력하세요.

int number = 5;

 

42. 피보나치 수열 계산하기 (재귀적): 주어진 숫자까지의 피보나치 수열을 재귀적으로 계산하여 출력하세요.

int n = 7;

 

43. 하노이 탑 문제 해결하기: 주어진 원판 개수로 하노이 탑 문제를 해결하여 이동 경로를 출력하세요.

int n = 3;

 

44. 백트래킹을 이용한 부분 집합 찾기: 주어진 배열의 모든 부분 집합을 백트래킹을 이용하여 출력하세요.

List<int> numbers = [1, 2, 3];

 

45. 배열에서의 모든 조합 찾기: 주어진 배열의 모든 조합을 찾고 출력하세요.

List<int> numbers = [1, 2, 3];

 

46. 재귀를 이용한 배열 요소의 합 구하기: 배열의 모든 요소의 합을 재귀적으로 계산하여 출력하세요.

List<int> numbers = [5, 10, 15];

 

47. 문자열의 모든 조합 찾기: 주어진 문자열의 모든 조합을 찾아 출력하세요.

String text = "abc";

 

48. 재귀를 이용한 이진 트리 순회: 이진 트리를 재귀적으로 순회하여 노드 값을 출력하세요.

class TreeNode {
  int value;
  TreeNode left, right;
  TreeNode(this.value, [this.left, this.right]);
}

 

49. 백트래킹을 이용한 N-Queens 문제 해결하기: N-Queens 문제를 백트래킹을 이용하여 해결하고 체스판에 배치하는 방법을 출력하세요.

int n = 8;

 

50. 재귀를 이용한 문자열 반전하기: 주어진 문자열을 재귀적으로 반전하여 출력하세요.

String text = "hello";

 

6. 동적 프로그래밍 (Dynamic Programming)

51. 피보나치 수열 (동적 프로그래밍): 주어진 숫자까지의 피보나치 수열을 동적 프로그래밍으로 계산하여 출력하세요.

int n = 10;

 

52. 최대 공통 부분 문자열 (동적 프로그래밍): 두 문자열의 최대 공통 부분 문자열을 동적 프로그래밍으로 찾아 출력하세요.

String s1 = "abcde";
String s2 = "abfce";

 

53. 0/1 배낭 문제 (동적 프로그래밍): 주어진 아이템과 무게, 가치로 0/1 배낭 문제를 해결하여 최대 가치를 출력하세요.

List<int> weights = [1, 2, 3];
List<int> values = [10, 20, 30];
int capacity = 5;

 

54. 최소 편집 거리 (동적 프로그래밍): 두 문자열의 최소 편집 거리를 동적 프로그래밍으로 계산하여 출력하세요.

String s1 = "kitten";
String s2 = "sitting";

 

55. 가장 긴 증가하는 부분 수열 (LIS): 주어진 배열의 가장 긴 증가하는 부분 수열의 길이를 동적 프로그래밍으로 구하여 출력하세요.

List<int> numbers = [10, 22, 9, 33, 21, 50, 41, 60];

 

56. 최장 공통 부분 수열 (LCS): 두 문자열의 최장 공통 부분 수열의 길이를 동적 프로그래밍으로 구하여 출력하세요.

String s1 = "ABCBDAB";
String s2 = "BDCAB";

 

57. 최소 동전 문제 (동적 프로그래밍): 주어진 동전들의 종류로 특정 금액을 만들기 위한 최소 동전 수를 동적 프로그래밍으로 구하여 출력하세요.

List<int> coins = [1, 3, 4];
int amount = 6;

 

58. 구간 합 문제 (동적 프로그래밍): 주어진 배열의 구간 합을 동적 프로그래밍으로 계산하여 출력하세요.

List<int> numbers = [1, 2, 3, 4, 5];
int start = 1;
int end = 3;

 

59. 최대 부분 배열 합 문제 (Kadane's Algorithm): 주어진 배열에서 최대 부분 배열의 합을 Kadane's Algorithm을 사용하여 구하여 출력하세요.

List<int> numbers = [-2, 1, -3, 4, -1, 2, 1, -5, 4];

 

60. 최소 부분 배열 합 문제: 주어진 배열에서 최소 부분 배열의 합을 구하여 출력하세요.

List<int> numbers = [1, -2, 3, -4, 5];

 

7. 그래프 (Graphs)

61. 그래프의 인접 리스트 구현하기: 주어진 정점과 엣스를 이용하여 그래프의 인접 리스트를 구현하고 출력하세요.

Map<int, List<int>> graph = {};

 

62. 그래프의 깊이 우선 탐색 (DFS): 그래프의 깊이 우선 탐색(DFS)을 구현하여 노드를 순회하세요.

Map<int, List<int>> graph = {1: [2, 3], 2: [4], 3: [4], 4: []};
int startNode = 1;

 

63. 그래프의 너비 우선 탐색 (BFS): 그래프의 너비 우선 탐색(BFS)을 구현하여 노드를 순회하세요.

Map<int, List<int>> graph = {1: [2, 3], 2: [4], 3: [4], 4: []};
int startNode = 1;

 

64. 최단 경로 찾기 (다익스트라 알고리즘): 그래프에서 두 정점 사이의 최단 경로를 다익스트라 알고리즘으로 구하여 출력하세요.

Map<int, Map<int, int>> graph = {};
int start = 1;
int end = 4;

 

65. 최단 경로 찾기 (벨만-포드 알고리즘): 그래프에서 두 정점 사이의 최단 경로를 벨만-포드 알고리즘으로 구하여 출력하세요.

Map<int, Map<int, int>> graph = {};
int start = 1;
int end = 4;

 

66. 최소 신장 트리 (크루스칼 알고리즘): 그래프에서 최소 신장 트리를 크루스칼 알고리즘으로 구하여 출력하세요.

List<List<int>> edges = [];

 

67. 최소 신장 트리 (프림 알고리즘): 그래프에서 최소 신장 트리를 프림 알고리즘으로 구하여 출력하세요.

Map<int, List<List<int>>> graph = {};

 

68. 강한 연결 요소 찾기 (타르잔의 알고리즘): 그래프에서 강한 연결 요소를 타르잔의 알고리즘으로 찾아 출력하세요.

Map<int, List<int>> graph = {};

 

69. 위상 정렬: 그래프의 위상 정렬을 구현하여 출력하세요.

Map<int, List<int>> graph = {};

 

70. 이분 그래프 판별하기: 주어진 그래프가 이분 그래프인지 판별하여 출력하세요.

Map<int, List<int>> graph = {};

 

8. 정렬 및 탐색 (Sorting and Searching)

 

71. 퀵 정렬 구현하기: 주어진 배열을 퀵 정렬로 정렬하여 출력하세요.

List<int> numbers = [10, 7, 8, 9, 1, 5];

 

72. 합병 정렬 구현하기: 주어진 배열을 합병 정렬로 정렬하여 출력하세요.

List<int> numbers = [12, 11, 13, 5, 6, 7];

 

73. 힙 정렬 구현하기: 주어진 배열을 힙 정렬로 정렬하여 출력하세요.

List<int> numbers = [4, 10, 3, 5, 1];

 

74. 선택 정렬 구현하기: 주어진 배열을 선택 정렬로 정렬하여 출력하세요.

List<int> numbers = [64, 25, 12, 22, 11];

 

75. 삽입 정렬 구현하기: 주어진 배열을 삽입 정렬로 정렬하여 출력하세요.

List<int> numbers = [12, 11, 13, 5, 6];

 

76. 이진 탐색 구현하기: 정렬된 배열에서 이진 탐색을 이용하여 특정 값을 찾고 인덱스를 출력하세요.

List<int> numbers = [2, 3, 4, 10, 40];
int target = 10;

 

77. 선형 탐색 구현하기: 주어진 배열에서 선형 탐색을 이용하여 특정 값을 찾고 인덱스를 출력하세요.

List<int> numbers = [10, 20, 30, 40, 50];
int target = 30;

 

78. 배열의 모든 쌍 찾기: 주어진 배열에서 두 수의 합이 특정 값이 되는 모든 쌍을 찾아 출력하세요.

List<int> numbers = [1, 4, 5, 7, 9];
int target = 8;

 

79. 문자열의 모든 회문 찾기: 주어진 문자열에서 모든 회문을 찾아 출력하세요.

String text = "racecar madam level";

 

80. 문자열의 모든 회문 부분 문자열 찾기: 주어진 문자열에서 모든 회문 부분 문자열을 찾아 출력하세요.

String text = "abccba";

 

9. 동적 프로그래밍 및 기타 문제 (Dynamic Programming and Miscellaneous)

81. 가장 긴 증가하는 부분 수열 (LIS) 길이 구하기: 주어진 배열에서 가장 긴 증가하는 부분 수열의 길이를 구하여 출력하세요.

List<int> numbers = [10, 22, 9, 33, 21, 50, 41, 60];

 

82. 행렬의 최단 경로 문제 해결하기: 주어진 행렬에서 시작점에서 끝점까지의 최단 경로를 찾고 경로의 길이를 출력하세요.

List<List<int>> matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

 

83. 행렬의 최대 경로 문제 해결하기: 주어진 행렬에서 시작점에서 끝점까지의 최대 경로를 찾고 경로의 길이를 출력하세요.

List<List<int>> matrix = [
  [10, 10, 2, 0],
  [1, 20, 4, 1],
  [0, 30, 3, 6]
];

 

84. 정수 배열의 부분 집합 합 문제 해결하기: 주어진 배열에서 특정 합을 만드는 모든 부분 집합을 찾아 출력하세요.

List<int> numbers = [1, 2, 3, 4, 5];
int targetSum = 8;

 

85. 최소 스패닝 트리 문제 해결하기: 그래프에서 최소 스패닝 트리를 찾고 그 가중치의 합을 출력하세요.

List<List<int>> edges = [
  [0, 1, 10],
  [0, 2, 6],
  [0, 3, 5],
  [1, 3, 15],
  [2, 3, 4]
];

 

86. 최대 부분 배열 합 문제 (Kadane's Algorithm): 배열에서 최대 부분 배열의 합을 Kadane's Algorithm으로 구하여 출력하세요.

List<int> numbers = [-2, 1, -3, 4, -1, 2, 1, -5, 4];

 

87. 배열의 부분 집합을 생성하여 출력하기: 주어진 배열의 모든 부분 집합을 생성하여 출력하세요.

List<int> numbers = [1, 2, 3];

 

88. 모든 가능한 조합 구하기: 주어진 배열의 모든 가능한 조합을 생성하여 출력하세요.

List<int> numbers = [1, 2, 3];

 

89. 문자열의 모든 순열 구하기: 주어진 문자열의 모든 순열을 생성하여 출력하세요.

String text = "abc";

 

90. 배열의 순열을 생성하여 출력하기: 주어진 배열의 모든 순열을 생성하여 출력하세요.

List<int> numbers = [1, 2, 3];

 

91. 부분 문자열의 최대 길이 구하기: 주어진 문자열에서 최대 길이의 부분 문자열을 구하여 출력하세요.

String text = "abcabcbb";

 

92. 정수 배열의 모든 쌍의 곱 구하기: 주어진 배열의 모든 쌍의 곱을 계산하여 출력하세요.

List<int> numbers = [1, 2, 3, 4];

 

93. 이진 트리의 깊이 구하기: 주어진 이진 트리의 깊이를 구하여 출력하세요.

class TreeNode {
  int value;
  TreeNode left, right;
  TreeNode(this.value, [this.left, this.right]);
}

 

94. 이진 트리의 모든 경로 찾기: 주어진 이진 트리에서 모든 경로를 찾아 출력하세요.

class TreeNode {
  int value;
  TreeNode left, right;
  TreeNode(this.value, [this.left, this.right]);
}

 

95. 이진 검색 트리의 유효성 검사하기: 주어진 이진 검색 트리가 유효한지 검사하여 출력하세요.

class TreeNode {
  int value;
  TreeNode left, right;
  TreeNode(this.value, [this.left, this.right]);
}

 

96. 문자열을 압축하여 출력하기: 주어진 문자열을 압축하여 출력하세요.

String text = "aabcccccaaa";

 

97. 문자열에서 모든 고유 문자 찾기: 주어진 문자열에서 모든 고유 문자를 찾아 출력하세요.

String text = "hello";

 

98. 주어진 정수의 모든 약수 찾기: 주어진 정수의 모든 약수를 찾아 출력하세요.

int number = 28;

 

99. 정수 배열의 각 원소에 대해 제곱을 구하여 출력하기: 주어진 배열의 각 원소에 대해 제곱을 구하여 출력하세요.

List<int> numbers = [1, 2, 3, 4];

 

100. 문자열을 반복하여 일정 길이의 문자열 만들기: 주어진 문자열을 반복하여 특정 길이의 문자열을 만들고 출력하세요.

String text = "abc"; 
int length = 10;
반응형