Skip to content

Commit 7269762

Browse files
authored
Merge pull request #16 from kogorithm/week3_acw
[Week3] 안찬우 : 킹, 랜선 자르기, 크로스워드, 단풍잎이야기
2 parents e8a7b84 + 3dfea46 commit 7269762

File tree

4 files changed

+268
-0
lines changed

4 files changed

+268
-0
lines changed

src/3week/acw/단풍잎이야기.kt

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package `3week`.acw
2+
3+
class 단풍잎이야기{
4+
lateinit var quests:Array<Array<Int>>
5+
lateinit var comb:Array<Boolean>
6+
private var answer=0
7+
8+
private fun makeComb(arr:MutableList<Int>, targetNum:Int, count:Int, start:Int){
9+
if(count==targetNum){
10+
11+
for(i in 1 until 2*targetNum+1){
12+
if(comb[i]){
13+
arr.add(i)
14+
}
15+
}
16+
answer=answer.coerceAtLeast(quests.count{quest->arr.containsAll(quest.toList())})
17+
18+
arr.clear()
19+
return
20+
}
21+
22+
for(i in start .. 2*targetNum){
23+
comb[i]=true
24+
makeComb(arr,targetNum,count+1,i+1)
25+
comb[i]=false
26+
}
27+
}
28+
29+
fun solution(){
30+
val (n,m)=readln().split(" ").map{it.toInt()}
31+
quests=Array(m){readln().split(" ").map{it.toInt()}.toTypedArray()}
32+
comb=Array(2*n+1){false }
33+
34+
makeComb(mutableListOf(),n,0,1)
35+
36+
println(answer)
37+
38+
39+
}
40+
}
41+
fun main() {
42+
val sol = 단풍잎이야기()
43+
sol.solution()
44+
}

src/3week/acw/랜선자르기.kt

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package `3week`.acw
2+
import java.util.PriorityQueue
3+
4+
class 랜선자르기 {
5+
var answer = 0L
6+
lateinit var test : PriorityQueue<Long>
7+
8+
private fun binarySearch(start: Long, end: Long, targetNum: Int) {
9+
10+
if (start > end) {
11+
return
12+
}
13+
val now = ((start + end) / 2)
14+
val count = test.sumOf { it / now }
15+
16+
if (count < targetNum) {
17+
binarySearch(start, now - 1, targetNum)
18+
//작을 땐 더 작은 수로 계산해보기
19+
} else {
20+
answer = answer.coerceAtLeast(now)
21+
binarySearch(now + 1, end, targetNum)
22+
//크면 더 큰 수 찾아보기
23+
}
24+
25+
}
26+
27+
fun solution() {
28+
val (K, N) = readln().split(" ").map { it.toInt() }
29+
30+
test=PriorityQueue<Long>().apply{
31+
addAll(Array(K){ readln().toLong() })
32+
}
33+
34+
binarySearch(1, test.last(), N)
35+
36+
println(answer)
37+
38+
39+
}
40+
}
41+
42+
fun main() {
43+
val sol = 랜선자르기()
44+
sol.solution()
45+
}
46+
47+

src/3week/acw/크로스워드.kt

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package `3week`.acw
2+
import java.util.PriorityQueue
3+
4+
5+
class 크로스워드{
6+
lateinit var puzzle: Array<String>
7+
var row=0
8+
var column=0
9+
10+
private val direction = listOf(
11+
Pair(0, -1),
12+
Pair(0, 1),
13+
Pair(1, 0),
14+
Pair(-1, 0)
15+
)
16+
data class Pos(val y: Int,val x: Int)
17+
18+
var words = PriorityQueue<String>()
19+
20+
fun isIsolate(y:Int,x:Int):Boolean{
21+
for(i in 0 until 4){
22+
val nPos= Pos(y+direction[i].first,x+direction[i].second)
23+
24+
if(nPos.y<0 || nPos.x<0 || nPos.y>=column ||nPos.x>=row){
25+
continue
26+
}
27+
28+
if(puzzle[nPos.y][nPos.x] !in 'a'..'z'){
29+
return false
30+
}
31+
}
32+
33+
return true
34+
}
35+
36+
fun solution() {
37+
readln().split(" ").let{ (c,r) ->
38+
row=r.toInt()
39+
column=c.toInt()
40+
}
41+
puzzle = Array(column){ readln() }
42+
43+
44+
repeat(column){
45+
puzzle[it].split("#").map {
46+
if(it.length>1){
47+
words.add(it)
48+
}
49+
}
50+
51+
}//가로
52+
53+
repeat(row){
54+
var word=""
55+
for(i in 0 until column){
56+
word+=puzzle[i][it]
57+
}
58+
word.split("#").map {
59+
if(it.length>1){
60+
words.add(it)
61+
}
62+
}
63+
}//세로
64+
65+
for(i in 0 until column){
66+
for(j in 0 until row){
67+
isIsolate(i,j)
68+
}
69+
}
70+
71+
72+
println(words.first())
73+
74+
}
75+
}
76+
fun main(){
77+
val sol = 크로스워드()
78+
sol.solution()
79+
}
80+

src/3week/acw/킹.kt

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package `3week`.acw
2+
3+
const val king=3
4+
const val stone=2
5+
class 킹{
6+
lateinit var input:List<String>
7+
var chessMap=Array(8){Array(8){0} }
8+
9+
val direction= hashMapOf<String,Pair<Int,Int>>(
10+
Pair("R",Pair(0,1)),
11+
Pair("L",Pair(0,-1)),
12+
Pair("B",Pair(1,0)),
13+
Pair("T",Pair(-1,0)),
14+
Pair("RT",Pair(-1,1)),
15+
Pair("LT",Pair(-1,-1)),
16+
Pair("RB",Pair(1,1)),
17+
Pair("LB",Pair(1,-1))
18+
)
19+
20+
21+
fun validate(y:Int,x:Int):Boolean{
22+
return !(y<0 || x<0 || y>7 || x>7)
23+
}
24+
25+
fun solution(){
26+
input=readln().split(" ")
27+
28+
var kingX=input[0][0]-'A'
29+
var kingY=8-input[0][1].digitToInt()
30+
31+
var stoneX=input[1][0]-'A'
32+
var stoneY=8-input[1][1].digitToInt()
33+
34+
val N=input[2].toInt()
35+
36+
chessMap[kingY][kingX]=king
37+
//king
38+
39+
chessMap[stoneY][stoneX]=stone
40+
//stone
41+
42+
for( i in 0 until N){
43+
val mv=readln()
44+
45+
val ny=kingY+direction[mv]!!.first
46+
val nx=kingX+direction[mv]!!.second
47+
if(!validate(ny,nx)){
48+
continue
49+
}//유효성 check
50+
51+
if(chessMap[ny][nx]==stone){
52+
val nsy=stoneY+direction[mv]!!.first
53+
val nsx=stoneX+direction[mv]!!.second
54+
55+
if(!validate(nsy,nsx)){
56+
continue
57+
}//돌이 자리를 비켜주지 못할 때
58+
else{
59+
chessMap[stoneY][stoneX]=0
60+
chessMap[kingY][kingX]=0
61+
62+
chessMap[nsy][nsx]=stone
63+
chessMap[ny][nx]=king
64+
65+
kingY=ny
66+
kingX=nx
67+
68+
stoneY=nsy
69+
stoneX=nsx
70+
//이동시켜주기
71+
72+
continue
73+
}
74+
75+
}//가는 자리에 돌이 있을 때
76+
77+
78+
chessMap[kingY][kingX]=0
79+
chessMap[ny][nx]=king
80+
kingY=ny
81+
kingX=nx
82+
//아무문제 없으면 king만 이동
83+
84+
}
85+
86+
87+
88+
println("${(kingX+'A'.toInt()).toChar()}${8-kingY}\n${(stoneX+'A'.toInt()).toChar()}${8-stoneY}")
89+
90+
}
91+
}
92+
93+
94+
fun main(){
95+
val sol = 킹()
96+
sol.solution()
97+
}

0 commit comments

Comments
 (0)