목록코딩테스트 (22)
슈프림 블로그
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 위의 문장이 문제 내용의 전부다. h보다 큰 값이 h개 이상인 경우를 찾으면 된다. 어떻게 접근해야할까?? 최대값을 찾아야 하므로 일단 citations를 내림차순으로 정렬하는 것이 편리할 것이다. 내림차순 정렬된 배열은 x보다 작은 인덱스에 위치한 값은 x번째 값보다 크다는 것을 이용하여, h-1 인덱스의 값이 h 이상인지 판별하면 답을 얻어낼 수 있다. (= 적어도 0 ~ h-1 인덱스까지의 값들은 h 값 이상이라는 뜻) 실패 케이스 h를 점차 하나씩 줄여가면서 판단하면 되겠다는 생각으로, h의 초기값은 citations 값 중 최댓값으로 ..
문제에서 요구하는 그대로 풀어내면 되는 간단한 문제다. 먼저 2차원 배열 commands에는 [i,j,k]가 여러개 담겨있는 구조다. i와 j로는 부분 배열을 만들면 되고, k로는 정렬된 부분배열에서 값을 꺼내오면 된다. 반복문을 돌면서 i,j,k 값의 묶음을 꺼내자. for command in commands 사용하기 편리하도록 변수 i,j,k에 값을 저장해주자. 여기서 -1을 다 뺀 이유는?? 문제에서는 i번째, j번째, k번째라는 표현을 했는데, 배열 인덱스는 0부터 시작하므로 배열에 접근하기 위해서는 -1을 해줘야 한다. let i = command[0]-1 let j = command[1]-1 let k = command[2]-1 부분배열을 만들고, 정렬해주자. let sorted = array..
# 실패 케이스 1 가장 먼저 생각했던 방식은 1. 모든 Int형 배열로 들어온 입력값을 String형 배열로 변환한다. 2. 맨 앞자리를 비교하여 큰 수가 앞으로 가도록 정렬한다. 3. 정렬된 배열을 하나의 문자열로 변환한다. (joined 함수) func solution(_ numbers:[Int]) -> String { var strings = numbers.map{String($0)} strings.sort{ guard let first0 = $0.first, let first1 = $1.first else { return false } return first0 > first1 } return strings.joined() } 이 방식은 두번째 테스트 케이스를 통과하지 못했다. 3과 30과 34를..
먼저 조건을 살펴보았다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 이 조건들을 살펴 보니, 각 장르별로 노래가 재생된 횟수를 모두 더한 값을 가지고 있는 딕셔너리가 하나 필요 할 것 같고 그 횟수에 따라 가장 많이 재생된 장르부터 정렬된 배열이 필요할 것 같다. 그리고 장르별로 속한 노래가 무엇인지 저장하는 딕셔너리도 필요할 것 같다. 딕셔너리의 value값은 id(Int)들을 저장하는 배열일 것이다. playsByGenre: [String:Int] [장르이름 : 해당 장르가 총 재생된 횟수] - genres와 plays의 크기는 같다고 했으므로, 그 크기만큼..
2020.08.30 어떻게 접근을 할까? 같은 이름의 옷은 없다고 했으므로 어떤 옷이 무슨 종류인지 보다, 옷의 종류별로 몇개의 옷이 있는지가 중요하다. => 반복문을 돌면서 [옷의 종류 : 종류별 개수] 형태의 딕셔너리에 저장하자. 한 종류의 옷은 0개 또는 1개만 착용 가능하고 한번에 옷의 종류별로 최대 1개씩만 착용 가능하므로 종류가 3종류라면 한번에 최대 3벌의 옷을 입을 수 있는 것이다. 상의에 착용할 수 있는 옷이 2벌, 하의에 착용할 수 있는 옷이 3벌인 경우를 가정해보자. 상의에 착용할 수 있는 경우의 수는 가지고 있는 2벌 또는 입지 않는 경우이므로 총 3가지다. 하의는 가지고 있는 3벌을 입거나 입지 않는 경우로 총 4가지다. 상의와 하의의 조합을 따져보면 총 3x4 = 12가지이다. ..
고민중인 문제!-! 기록용 더보기 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 hit, target가 cog, words가 [hot,dot,dog,lot,log,cog]라면 hit -> hot -> dot -> dog -> cog와 같이 4단계를 거쳐 변환할 수 있습니다. 두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 변환할 수 있는지 re..