티스토리 뷰
2018 카카오 블라인드 코딩 1차
http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
카카오 에서는 블라인드 전형으로 공채 채용을 하고 있는데요, 이번 포스팅에선 2018년 1차 문제에 대해 살펴보겠습니다. 1차 문제는 총 7문제로 구성되어 있는데요, 5시간동안 4문제 이상 풀어내면 합격이라고 합니다. 언어는 어떤 언어든 상관 없으며 C, C++, JAVA, PYTHON 등 다양한 언어가 사용되었다고 합니다.
6. 프렌즈 4블록 - 문제
블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 “프렌즈4블록”.
같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙어있을 경우 사라지면서 점수를 얻는 게임이다.
만약 판이 위와 같이 주어질 경우, 라이언이 2×2로 배치된 7개 블록과 콘이 2×2로 배치된 4개 블록이 지워진다.
같은 블록은 여러 2×2에 포함될 수 있으며, 지워지는 조건에 만족하는 2×2 모양이 여러 개 있다면 한꺼번에 지워진다.블록이 지워진 후에 위에 있는 블록이 아래로 떨어져 빈 공간을 채우게 된다.
만약 빈 공간을 채운 후에 다시 2×2 형태로 같은 모양의 블록이 모이면 다시 지워지고 떨어지고를 반복하게 된다.
위 초기 배치를 문자로 표시하면 아래와 같다.
TTTANTRRFACCRRRFCCTRRRAATTMMMFTMMTTJ
각 문자는 라이언(R), 무지(M), 어피치(A), 프로도(F), 네오(N), 튜브(T), 제이지(J), 콘(C)을 의미한다.
입력으로 블록의 첫 배치가 주어졌을 때, 지워지는 블록은 모두 몇 개인지 판단하는 프로그램을 제작하라.
입력 형식
입력으로 판의 높이 m, 폭 n과 판의 배치 정보 board가 들어온다.
2 ≦ n, m ≦ 30
board는 길이 n인 문자열 m개의 배열로 주어진다. 블록을 나타내는 문자는 대문자 A에서 Z가 사용된다.
출력 형식
입력으로 주어진 판 정보를 가지고 몇 개의 블록이 지워질지 출력하라.
입출력 예제
예제에 대한 설명
입출력 예제 1의 경우, 첫 번째에는 A 블록 6개가 지워지고, 두 번째에는 B 블록 4개와 C 블록 4개가 지워져, 모두 14개의 블록이 지워진다.
입출력 예제 2는 본문 설명에 있는 그림을 옮긴 것이다. 11개와 4개의 블록이 차례로 지워지며, 모두 15개의 블록이 지워진다.
곰가드의 코드
import redef value_input(lst=[]):m = int(input('m = '))n = int(input('n = '))for i in range(m):while True:value = input('{} 째 라인. {} 개 대문자 :'.format(i+1,n))value = re.sub('[^A-Z]', '', value)if len(value) == n:lst.append(value)breakprint('wrong value')return lstdef convert_table(lst):res_table = [[] for i in range(len(lst[0]))]for i in range(len(lst[0])):for j in range(len(lst)):res_table[i].append(lst[len(lst)-1-j][i])return res_tabledef checker(lst):res = []for i in range(len(lst)-1):for j in range(len(lst[i])-1):try:if lst[i][j] == lst[i+1][j] == lst[i][j+1] == lst[i+1][j+1]:res += [(i,j), (i+1,j), (i, j+1), (i+1,j+1)]except:passres = sorted(list(set(res)), reverse = True)[lst[i[0]].pop(i[1]) for i in res]return lst, len(res)#lst = ['TTTANT', 'RRFACC', 'RRRFCC', 'TRRRAA', 'TTMMMF', 'TMMTTJ']#lst = ['CCBDE', 'AAADE', 'AAABF', 'CCBBF']lst = value_input()convert_lst = [convert_table(lst), '']result = 0while True:if convert_lst[1] == 0:breakconvert_lst = checker(convert_lst[0])result += convert_lst[1]print(result)
value_input 메소드는 m, n, list 값을 입력 받는 메소드 입니다.
convert_table 메소드는 리스트에서 값을 삭제할 경우 쉽게 하기 위해 입력받은 list 값을 전치행렬 모양으로 변경해주는 메소드 입니다.
checker 메소드는 현재 상태에서 4개씩 모여있는 부분이 있는지 검사하고 모여있는 좌표를 반환해주는 메소드 입니다.
실행 부의 while 루프는 checker 메소드를 제거할 블록이 없을 때까지 실행 시킨 뒤 지워지는 블록의 총 개수를 알려줍니다.
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 부분이나 질문이 있으시면
댓글로 말씀해주세요.
금방 확인하고 피드백 드리겠습니다.
좋은 하루 되세요. ^^
'#Archive' 카테고리의 다른 글
2018 카카오 신입 공채 1차 블라인드 코딩테스트 문제 07 (0) | 2018.01.18 |
---|---|
1463. 1로 만들기 - 동적 프로그래밍, 다이나믹 프로그래밍 (0) | 2018.01.17 |
2018 카카오 신입 공채 1차 블라인드 코딩테스트 문제 05 (0) | 2018.01.16 |
다이나믹 프로그래밍 - 동적 계획법 (0) | 2018.01.15 |
2018 카카오 신입 공채 1차 블라인드 코딩테스트 문제 04 (0) | 2018.01.15 |
- Total
- Today
- Yesterday
- 머신러닝
- 서울근교캠핑
- 계곡캠핑
- 가평여행
- sql
- SeoulTravel
- 캠핑장추천
- 알고리즘
- 가족캠핑
- 자연힐링
- 카카오
- 여름휴가
- 글램핑
- 영월캠핑
- 파이썬
- 여름캠핑
- Koreancuisine
- 가족여행
- python
- 강원도캠핑
- 반려견캠핑
- 캠핑초보
- 커플여행
- 영월여행
- 강원도여행
- 백준
- bukhansannationalpark
- 가평캠핑
- Oracle
- 여름휴가추천
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |