inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-R

[5_R]문제해설에서 100의 의미가 무엇인가요?

267

jsshin0201

작성한 질문수 8

0

안녕하세요!

 

문제 해설 : http://boj.kr/db0d13a9155748f38feda4624064efd9

에서, move함수나 ismal함수에 '인덱스가 100이면' 이라는 조건이 있는데 이 부분이 잘 이해가 안됩니다. ㅜㅜ.


말이 윳놀이 판에서 통과한 경우를 의미하신건가요??
만약 그렇다면, 다른 값이 아니라 100이라고 주신 이유가 있나요?

감사합니다!

c++ 코딩-테스트

답변 1

0

큰돌

안녕하세요 ㅎㅎ

말이 윳놀이 판에서 통과한 경우를 의미하신건가요??

>> 네 맞습니다. 판에서 벗어나는 경우를 의미합니다.

 

만약 그렇다면, 다른 값이 아니라 100이라고 주신 이유가 있나요?
>> 판에서 벗어나는 특정값으로 하기만 하면 됩니다. 100은 제 스타일인데요. ㅎㅎ

일단 제가 만든 맵을 보면 1 ~ 31까지의 번호를 적어서 구현을 했죠?

그 외의 번호로 한 것이다 라고 보시면 됩니다.

 

참고로 100이아닌 이렇게 하셔도 됩니다.

#include<bits/stdc++.h>
using namespace std; 
const int INF = 987654321;
int a[14], mal[4], n = 10;
int v[104]; 
vector<int> adj[54]; 
int move(int here, int cnt){  
	if(here == 1201) return 1201; 
	if(adj[here].size() >= 2){
		here = adj[here][1]; cnt--; 
	} 
	if(cnt){
		queue<int>q; 
		q.push(here); 
		int there; 
		while(q.size()){
			int x = q.front(); q.pop(); 
			there = adj[x][0];
			q.push(there); 
			if(there == 1201)break;
			cnt--;   
			if(cnt == 0)break;
		}
		return there; 
	}else return here; 
}
bool isMal(int mal_idx, int idx){
	if(mal_idx == 1201) return false; 
	for(int i = 0; i < 4; i++){ 
		if(i == idx) continue; 
		if(mal[i] == mal_idx) return true; 
	}
	return false; 
}
void add(int here, int there){
	adj[here].push_back(there); 
}
void setMap(){
	for(int i = 0; i <= 19; i++) add(i, i + 1); 
	add(5, 21); add(21, 22); add(22, 23); add(23, 24); 
	add(15, 29); add(29, 30); add(30, 31);add(31, 24); 

	add(10, 27); add(27, 28); add(28, 24); add(24, 25); 
	add(25, 26); add(26, 20); add(20, 1201);  

	v[1] = 2; v[2] = 4;  v[3] = 6; v[4] = 8; v[5] = 10; 
	v[6] = 12; v[7] = 14; v[8] = 16; v[9] = 18; v[10] = 20; 
	v[11] = 22; v[12] = 24; v[13] = 26; v[14] = 28; v[15] = 30; 
	v[16] = 32; v[17] = 34; v[18] = 36; v[19] = 38; v[20] = 40; 
	v[21] = 13; v[22] = 16; v[23] = 19;  v[24] = 25; 
	v[27] = 22; v[28] = 24; v[25] = 30; v[26] = 35; 
	v[29] = 28; v[30] = 27; v[31] = 26; 
}
int go(int here){ 
	if(here == n) return 0; 
	int ret = 0; 
	for(int i = 0; i < 4; i++){
		int temp_idx = mal[i];
		int mal_idx = move(temp_idx, a[here]);   
		if(isMal(mal_idx, i)) continue;    
		mal[i] = mal_idx;  
		ret = max(ret, go(here + 1) + v[mal_idx]); 
		mal[i] = temp_idx; 
	} 
	//cout << "RET : " << ret << "\n";
	return ret; 
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);setMap(); 
	for(int i = 0; i < n; i++) cin >> a[i]; 
	cout << go(0) << "\n"; 
    return 0;
}

참고로 1201은 제 생일입니다.

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


6-H 체점 관련 질문

0

7

0

채점서버 연결 관련 질문입니다

0

31

1

삼성 s직군

0

31

0

삼성 코테 없어짐

0

81

1

코딩살구클럽 가입부탁드립니다

0

40

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

35

2

5-S 테스트 케이스 질문

0

37

2

코살 문제풀이 환경

0

54

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

46

1

추천 추가문제들

0

44

2

프로그래머스 코테 환경 관련해서 질문드립니다.

0

50

2

해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.

0

44

2

균형 이진 트리 설명 시 높이 숫자

0

33

2

4-H 질문드립니다.

0

37

2

1-K 질문드립니다.

0

43

2

대기업 인적성 시험 질문

0

43

2

4-C 질문드립니다

0

43

2

[수학숙제 / BOJ 2870] 채점 서버 오작동

0

40

1

코테 준비 질문

0

58

1

살구클럽가입 요청드려요

0

42

2

1-I 문제 질문

0

46

2

코딩살구클럽 가입

0

61

2

AI 코딩 도구 사용 시 학습 방법 조언

0

56

2

코딩살구클럽 오류

0

67

2