강의노트

- (1/1) 숫자 카드 게임

숫자 카드 게임 (2019 국가 교육기관 코딩테스트)

숫자 카드 게임은 여러개의 숫자중에서 가장 높은 숫자가 쓰인 카드를 한장 뽑는 게임이다.

단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다.

  • 숫자가 쓰인 카드들이 N $\times $M 형태로 놓여 있다.
  • 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다.
  • 그 다음 선택된 행에 포함된 카드들 중에서 가장 숫자가 낮은 카드를 뽑아야 한다.
  • 따라서 처음에 카드를 골라낼 행을 선택할때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다.

- 예시1

입력
3 1 2 
4 1 4 
2 2 2 
출력 
2

- 예시2

입력
7 3 1 8 
3 3 3 4 
출력
3

(풀이)

(전략회의)

a1=c(3,1,2) 
a2=c(4,1,4)
a3=c(2,2,2)

우리는 일단 아래와 같은 모양을 만들어야함

3 1 2
4 1 4 
2 2 2

a1,a2,a3을 각각 row-vector 로 해석하고 bind 하면된다.

A = rbind(a1,a2,a3)
A
   [,1] [,2] [,3]
a1 3    1    2   
a2 4    1    4   
a3 2    2    2   
A= rbind(c(3,1,2),c(4,1,4),c(2,2,2))

입력이 A일경우 출력이 2가 나와야한다.

전략:

  1. A의 각 행(row)을 돌아가면서 가장 작은 숫자를 찾아 기록한다.
  2. 기록한 숫자들을 모아서 벡터로 만든다.
  3. 벡터의 최대값을 구한다.

할수있어야 하는것

  • A의 1번째 행, 2번째행, 3번째행을 순서대로 뽑을 수 있어야 한다.

(실질적풀이)

A= rbind(c(3,1,2),c(4,1,4),c(2,2,2))
vec<-c()
for (i in 1:3) vec[i]<- min(A[i,])
max(vec)
[1] 2

- 입력이 아래와 같은 경우

7 3 1 8 
3 3 3 4
A=rbind(c(7,3,1,8),c(3,3,3,4))
vec<-c()
for (i in 1:2) vec[i]<- min(A[i,])
max(vec)
[1] 3

숙제

입력구조가

3 4 5 1 
7 7 7 2 
8 1 8 2
3 3 4 5

와 같을 때 출력을 구하는 코드를 작성하시오.