본문 바로가기

Programmers

[Programmers] 튜플 - kotlin

튜플 (Level2)

link - https://programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 

1. 문제 파악하기

- 입력 : 튜플로 만든 집합이 배열로 나열된 스트링 (ex. {{2},{2,1},{2,1,3},{2,1,3,4}})

- 출력 : 집합들을 이용해 튜플을 유추하여 튜플을 배열로 리턴한다 

 

*튜플

튜플은 다음과 같은 성질을 가지고 있습니다.

  1. 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2)
  2. 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2)
  3. 튜플의 원소 개수는 유한합니다.

2. 아이디어

- 튜플이 무엇인지 이하하기까지가 좀 어려웠다 

- 튜플로 만든 집합에 들어있는 숫자의 횟수가 클수록 많을수록 튜플의 선수에 나오는 숫자이다  (규칙)

- '{;', '}' , ',' 이 아닌 숫자들을 hash map 에 key로 저장하고 value로 key가 나온 횟수를 저장한다 .

- map을 돌며 value - 1에 해당하는 index에 key를 저장한후 해당 배열을 return 

ex ) map에 111 - 2 / 20 - 1 로 저장된경우 111은 2번 , 20은 1 번 들어있는경우  

정답을 return할 배열 index 0 에 20 (value(1) - 1) /  배열 index 1에 111 (value(2) - 1) 을 넣은후 리턴 한다 

 

3. 풀이

class Solution {
    var map = HashMap<String, Int>()
    fun solution(s: String): IntArray {
        
        var tempString = ""
        for(i in 0 until s.length) {
            if(s[i] != '{' && s[i] != '}' && s[i] != ',') {
                tempString += s[i].toString()
            } else {
                if (tempString != "") {
                    var t = map.get(tempString) ?: 0 
                    map.put(tempString, t+1)
                    tempString = ""
                }
            }
        }
        var answer: Array<Int> = Array(map.size) {0}
        var t: Array<Int> = Array(map.size) {0}
        
        for ((k, v) in map) {
            t[v-1= k.toInt()
        }
        t.mapIndexed { i, v ->
            answer[t.size - i - 1= v
        }
        return answer.toIntArray()
    }
}
cs