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
반응형