Dart에서는 람다 함수(Lambda Function)를 사용하여 더 간결한 코드를 작성할 수 있다.
이번 글에서는 람다 함수의 개념과 사용법을 살펴보고,
백준 1181번 문제(단어 정렬) 를 해결하면서 실전에서 활용하는 방법을 알아본다.
1. Dart에서 람다 함수(Lambda)란?
람다 함수는 익명 함수(Anonymous Function)의 간단한 표현 방식이다.
📌 람다 함수의 문법
(매개변수) ⇒ 단 하나의 실행 코드;
- 중괄호 {} 없이 ⇒(화살표) 기호를 사용하여 표현할 수 있다.
- 매개변수는 있을 수도 있고 없을 수도 있다.
- 한 줄 코드만 사용할 수 있다.
📌 익명 함수와 람다 함수 비교
void main() {
final numbers = <double>[10, 2, 5, 0.5];
// 람다 함수 사용
final result = numbers.reduce((value, element) => value + element);
// 익명 함수 사용
final aResult = numbers.reduce((value, element) {
return value + element;
});
print(result); // 17.5
print(aResult); // 17.5
}
✅ 차이점:
- 람다 함수는 {} 없이 한 줄로 표현 가능
- 익명 함수는 {} 안에서 return을 사용하여 값 반환
2. 백준 1181번 문제 풀이 (Dart 활용)
📌 문제 링크: 백준 1181 - 단어 정렬
📌 문제 설명
🚀 입력 조건
- 첫째 줄: 단어 개수 N (1 ≤ N ≤ 20,000)
- 둘째 줄부터 N개의 단어가 입력됨 (최대 50자)
🎯 출력 조건
- 중복 제거
- 길이가 짧은 단어부터 정렬
- 길이가 같으면 사전 순 정렬
📌 해결 방법
1️⃣ 중복 제거 → Set() 사용
2️⃣ 사전 순 정렬 → sort() + compareTo() 활용
3️⃣ 길이 기준 정렬 → sort() 활용
📌 코드 구현 (람다 함수 적용)
import 'dart:io';
void main() {
// 입력받은 단어 개수 N
int? N = int.parse(stdin.readLineSync()!);
// 단어 리스트 생성
var strList = [for (var i = 0; i < N; i++) stdin.readLineSync()!];
// 1️⃣ 중복 제거
List<String> uniqueWords = strList.toSet().toList();
// 2️⃣ 먼저 사전 순 정렬 (알파벳 순서)
uniqueWords.sort((a, b) => a.compareTo(b));
// 3️⃣ 이후 길이 기준 정렬
uniqueWords.sort((a, b) => a.length.compareTo(b.length));
// 4️⃣ 결과 출력
uniqueWords.forEach((word) => print(word));
}
✅ 익명 함수로도 표현 가능
uniqueWords.forEach((word) {
print(word);
});
3. 입력 & 출력 예시
✅ 입력값
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
✅ 출력값
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
4. 정리
✅ Dart에서 람다 함수(Lambda) 사용법
✅ 백준 1181번 문제 해결 (중복 제거, 정렬, 람다 적용)
✅ Set(), sort(), compareTo(), forEach() 활용법 익히기
이제 Dart에서 람다 함수를 적극적으로 활용하여 코드의 가독성을 높일 수 있다! 🚀
☞ 파이썬 람다함수 이전 글은 아래 링크
파이썬 람다 함수 lambda (with 백준 1181)
lambda (람다) 표현식 lambda 키워드로 함수로 사용할 수 있으며 일반적인 함수 정의의 편의 문법임.lambda a, b: a+b 와 같이 함수 객체가 있는 곳이면 어디나 lambda 함수가 사용될 수 있다. 제약 문법적
yuneenelife.tistory.com
'코딩라이브러리 > Dart' 카테고리의 다른 글
[Dart] for, while 반복문 (with 백준 2446, 2522) (0) | 2024.07.18 |
---|---|
[Dart] if, swich 조건문 (with 백준 1330) (0) | 2024.06.18 |
dart 은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일이 아닙니다 (with 안드로이드 스튜디오) (0) | 2024.06.12 |
[Dart] 코딩 연습 입출력 코드 방법 (0) | 2024.06.10 |
[Dart] 변수 종류, 널(null) 변수 디폴트 처리 (1) | 2024.06.04 |