Menu
Coddy logo textTech

리스트에서 찾기: indexOf

Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 6번째.

특정 요소가 리스트의 어디에 위치하는지 찾아야 할 때, Dart는 indexOf() 메서드를 제공합니다. 이 메서드는 리스트를 검색하여 찾고 있는 요소가 처음으로 나타나는 인덱스 위치를 반환합니다.

indexOf() 메서드는 찾고자 하는 요소를 매개변수로 받아 정수를 반환합니다. 요소가 리스트에 존재하면 인덱스 위치(0부터 시작)를 반환합니다. 요소를 찾을 수 없으면 -1을 반환합니다.

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (첫 번째로 발견된 인덱스)
int grapeIndex = fruits.indexOf('grape');    // -1 (찾을 수 없음)

이 메서드는 특정 위치에서 삽입이나 삭제와 같은 작업을 수행하기 전에 항목의 위치를 알아야 할 때 특히 유용합니다. indexOf()는 첫 번째로 일치하는 항목만 찾는다는 점을 기억하세요. 따라서 요소가 여러 번 나타나면 첫 번째로 나타나는 위치의 인덱스를 얻게 됩니다.

challenge icon

챌린지

쉬움

서재 선반에서 특정 도서의 위치를 찾아 도서관 도서 검색 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:

  1. 도서관 구역 이름을 나타내는 문자열 입력을 읽습니다.
  2. 선반에 있는 도서 제목들을 나타내는 여러 개의 문자열 입력을 읽습니다 (빈 문자열이 입력되면 입력을 종료합니다).
  3. 검색할 도서 제목을 나타내는 문자열 입력을 읽습니다.
  4. indexOf() 메서드를 사용하여 요청된 도서의 위치를 찾습니다.
  5. 아래에 표시된 정확한 형식으로 검색 결과를 출력합니다.

예를 들어, 도서관 구역이 "Science Fiction"이고, 도서 목록이 "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game"이며, 검색할 도서가 "Foundation"인 경우, 프로그램은 다음과 같이 출력해야 합니다:

Library Section: Science Fiction
Books on shelf: [Dune, Foundation, Neuromancer, Foundation, Ender's Game]
Searching for: Foundation
Book found at position: 1
Status: Book located successfully

도서관 구역이 "Mystery"이고, 도서 목록이 "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon"이며, 검색할 도서가 "Gone Girl"인 경우, 프로그램은 다음과 같이 출력해야 합니다:

Library Section: Mystery
Books on shelf: [Sherlock Holmes, Agatha Christie, The Maltese Falcon]
Searching for: Gone Girl
Book found at position: -1
Status: Book not available

프로그램은 반드시 indexOf() 메서드를 사용하여 도서를 검색해야 합니다. 도서를 찾았을 때 (position >= 0), "Book located successfully"를 표시하세요. 도서를 찾지 못했을 때 (position = -1), "Book not available"를 표시하세요. indexOf()는 도서가 여러 번 나타날 경우 첫 번째로 발견된 위치를 반환한다는 점을 기억하세요.

치트 시트

리스트에서 요소의 위치를 찾으려면 indexOf()를 사용하세요:

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (첫 번째 발생)
int grapeIndex = fruits.indexOf('grape');    // -1 (찾지 못함)

이 메서드는 요소를 찾으면 인덱스 위치(0부터 시작)를 반환하고, 요소가 존재하지 않으면 -1을 반환합니다. 중복된 요소가 있는 경우 첫 번째로 발견된 위치만 찾습니다.

직접 해보기

import 'dart:io';

void main() {
  // 도서관 구역 이름 읽기
  String? section = stdin.readLineSync();
  
  // 빈 문자열이 나올 때까지 도서 제목 읽기
  List<String> books = [];
  String? book;
  while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
    books.add(book);
  }
  
  // 검색할 도서 읽기
  String? searchBook = stdin.readLineSync();
  
  // TODO: 아래에 코드를 작성하세요
  // indexOf() 메서드를 사용하여 도서의 위치를 찾으세요
  
  // 요구된 형식으로 결과 출력
  print('Library Section: $section');
  print('Books on shelf: $books');
  print('Searching for: $searchBook');
  // 검색 결과에 따라 위치와 상태 출력
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨