Week 9

Kakao - 카카오 신입 공채 3차 코딩 테스트

Week9 이번주의 문제
1 N진수 게임
2 압축
3 파일명 정렬
4 방금그곡
5 자동완성

1. N진수 게임

Go language 공부겸 이미 만들어진 진법 변환 함수를 사용하지 않고 작성해 보았다.

sol_1.go

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func decimalToTarget(num int, target int) []string {
	var slice []string

	if num == 0 {
		slice = append(slice, "0")
		return slice
	}
	for i := 0; num > 0; i++ {
		mod := strconv.Itoa(num % target)
		mod = str_mod(mod)
		slice = append(slice, mod)
		num = num / target
	}
	return reverseSlice(slice)
}
func reverseSlice(input []string) []string {
	for i, j := 0, len(input)-1; i < j; i, j = i+1, j-1 {
		input[i], input[j] = input[j], input[i]
	}
	return input
}
func str_mod(input string) string {
	switch input {
	case "10":
		return "A"
	case "11":
		return "B"
	case "12":
		return "C"
	case "13":
		return "D"
	case "14":
		return "E"
	case "15":
		return "F"
	}
	return input
}

func solution(format int, time int, player int, order int) {
	var answer []string
	num := 0
	t := time * player
	for len(answer) < time*player {
		convertVal := decimalToTarget(num, format)
		resJoin := strings.Join(convertVal, "")
		answer = append(answer, resJoin)
		num++

	}
	answersJoin := strings.Join(answer, "")
	answersSplit := strings.Split(answersJoin, "")
	for i := 0; i < t; i++ {
		if i%player == order-1 {
			fmt.Print(answersSplit[i])
		}
	}
	fmt.Println()
}

func main() {
	solution(2, 4, 2, 1)
	solution(16, 16, 2, 1)
	solution(16, 16, 2, 2)

}

2. 압축

LZW 알고리즘 설명의 의사코드를 구현하는 문제

sol_2.go

package main

import (
	f "fmt"
)

func solution_2(msg string) {
	dict := []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
	var msgLength = len(msg)
	answer := ""
	msgfor := 0
	msgback := msgLength
	for {
		for index, val := range dict {
			if val == msg[msgfor:msgback] {
				f.Print(index+1, " ")
				answer = answer + val
				if len(answer) == msgLength {
					return
				}
				dict = append(dict, string(val)+string(msg[msgback]))
				msgfor = msgfor + len(val)
				msgback = msgLength + 1
				break
			}
		}
		msgback--
	}

}

func main() {
	solution_2("KAKAO")
	solution_2("TOBEORNOTTOBEORTOBEORNOT")
	solution_2("ABABABABABABABAB")
}