본문 바로가기

백준 PS일지/Etc

[백준/Swift] 10814: 나이순 정렬 | PS일지 | 고차함수 사용!!

문제

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

간단한 문제 요약

나이와 이름이 가입한 순서대로 주어진다. 이때 회원들을 나이가 증가하는 순으로!! 나이가 같을 시 먼저 가입한 사람이 오는 순서로(이미 지정됬습니다. 가입한 순서대로 주어지기 때문입니다) 정렬하시오.

 

문제 풀이

이 문제는 말 그대로 입력받은 문장을 나이, 이름으로 분리 시킨 후에 나이에 따른 정렬을 하게 되는 문제입니다. 한 큐에 출력까지 뽑아보고 싶었습니다.

 

print(
  (0..<Int(readLine()!)!) //1
    .map{_ ->(String,String) in //2
      let a=readLine()! //3
        .split{$0==" "} //4
        .map{String($0)} //5
      return (a[0], a[1]) //6
    }
    .sorted{Int($0.0)!<Int($1.0)!} //7
    .map{"\($0.0) \($0.1)"} //8
    .joined(separator: "\n") //9
)

 

 

1. 회원 인원 수 입력 받습니다. 

2. map을 통해서 회원 수 만큼 반복합니다 회원수, 이름 받아서 배열로 반환할 예정입니다. (이때 반환 타입을 xCode에서 명시하지 않아도 되는데, 백준에서 명시 ( _ -> (String,String) in )안하면 추론을 못합니다.)

3. 나이와 이름을 하나의 문자열로 입력받습니다. "23 tom" //첫번째 readLine() 실행 예시

4. 문자열의 스페이스를 기준으로 하나였던 문자열을 여러 개의 문자열들로 분리합니다.

5. 스트링 타입의 배열 만듭니다. ["23","tom"] //첫번째 readLine() 실행 예시

6. 나이와 회원 명을 튜플로 만들어서 반환합니다. [("23","tom"),("54","mini"),("24","jun")]

map의 모든 연산이 끝나면 [(나이, 회원명)] 의 배열이 만들어지고 

7. 나이 순으로 정렬을 합니다. [("23","tom"), ("24","jun"), ("54","mini")]

8. (나이, 회원명) 튜플을 문자열로 변환합니다. ["23 tom", "24 jun", "54 mini"]

9. 배열을 한개의 문자열로 만들어 반환합니다. "23 tom\n24 jun\n54 mini"

반환된 문자열을 print함수로 출력합니다.