java 문제풀기(프로그래머스스쿨, 강의)

프로그래머스 Summer/Winter Coding(~2018) - 영어 끝말잇기

LRWoo 2023. 6. 26. 00:16
728x90
반응형
영어 끝말잇기

 

 

코딩테스트 연습 - 영어 끝말잇기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

result의 0번째 인덱스는 제외된 사람의 번호 
result의 1번째 인덱스는 끝말잇기 몇회째에 탈락했는지. 

 

 

 

 

static int[] solution(int n, String[] words) {
	int[] answer = { 0, 0 };
	HashMap<String, Integer> sMap = new HashMap<String, Integer>();
	sMap.put(words[0], 0);

	for (int i = 1; i < words.length; ++i) {
		sMap.put(words[i], 0);
		if (words[i - 1].charAt(words[i - 1].length() - 1) != words[i].charAt(0) || sMap.size() < i + 1) {
			answer[0] = i % n + 1;
			answer[1] = i / n + 1;
			break;
		}
	}
	return answer;
}

 

words 를 순회하면서 조건을 찾는데
if 앞 조건
if ( words[i - 1].charAt(words[i - 1].length() - 1) != words[i].charAt(0) || 
words의 앞글자랑 뒷글자를 매칭하고 
앞조건(이거나) ||  뒷 조건 = sMap.size() < i + 1)
smapsize는 똑같은 key값이 들어가면 i+1보다 작아지니까 겹치는 단어를 필터링한다
(hashMap의 key값은 중복을 허용하지 않는다 )
map에 같은 키값이 들어가면 동일한 하나로 생각해서 그걸로 판별하는것. 

만약 5명이서 게임을 반복한다고 생각하고 15번째에 걸렸다고 하면 ,
5번째사람이 끝말인기 3번째게임 에 걸린것이니까 
5명이서 빙빙 돌면서 하는데 5명이 몇번씩 시도했는지 찾는거라 생각하면 된다. 
n명이서 도는데 몇번 돌았냐 체크

answer[0] = i % n + 1;

0번째 인덱스는  제외되는 사람이니까 n보다 크면안된다. 
그래서 i의 요소를 n으로 나눈 나머지에 +1을 해주는것 

answer[1] = i / n + 1;

1번째 인덱스는 15번째에 걸린것이라고 생각하면 /5로 나누는데 
순서는 1번부터 시작이고, 인덱스는 0번부터니까 +1 

 

 

 

이클립스 전체코드  , 컴파일 후 결과 

 

728x90
반응형