728x90
삼성코테 현장 팁✨
아래 모든 사항들은 완전 100%는 아니지만, 이미 보신 분들께 들은 내용이니 대부분 맞을 것이다.
- 공부자료: 코테 현장에서는 입장하고나서는 노트북은 열지도 못하고, 휴대폰도 사용할 수 없다고 한다. 그래서 프린트물로 가져가든 그래야하는데, 나는 모든걸 블로그에 적어놔서.. 어쩐담.. 풀이 노트를 봐야겠다.
- 화장실: 그리고 인개원은 화장실이 진짜 좋다고 한다. 완전 궁금..! 그리고 시험중간에 화장실 갈 수 있다고 한다.
- 입실: 입실은 너무 빨리는 못한다고 한다. 정해진 입실시간보다 너무 빨리 갈 필요 없을 것 같다. 밖에서 대기.. 나는 한 10분전 도착하게 가려고 한다.
놀이기구 탑승
- 링크: https://www.codetree.ai/training-field/frequent-problems/problems/go-on-the-rides/description
- 기출: 삼성 SW 역량테스트 2021 상반기 오전 1번 문제
- 난이도:골드 5
- 분류: 시뮬레이션
- 직접 푼 여부: O (문제이해 및 풀이: 20min , 코딩:20min) -옛날 문제라 쉬운것일까? 골드5라서 그런지 빨리 풀었다.
- 언어: 파이썬
풀이 노트
정답 코드 💻
# 놀이기구 탑승 - 코드트리
import sys
input= sys.stdin.readline
# input 1 -----------
n=int(input())
# prepare
dr= [-1,1,0,0]
dc=[0,0,-1,1]
grid =[[0]*n for _ in range(n)] # 놀이기구 grid
likegrid =[[[] for _ in range(n)] for _ in range(n)] # 그 위치에 있는 친구가 좋아하는 친구 list
def inragne(r,c):
if 0<=r<n and 0<=c<n:
return True
return False
# main -----------
# [1] 놀이기구 앉히기 --------------
for _ in range(n*n):
# 초기화
now, l1,l2,l3,l4 = map(int, input().split())
like =[l1,l2,l3,l4]
candiated =[] # now가 위치 될 수 있는 곳 후보
for i in range(n):
for j in range(n):
if grid[i][j]!=0:
continue # 이미 사람 있으면, 다음칸 탐색
# 주변 좋아하는 사람과 빈칸 세기
likecnt = emptycnt = 0 # 초기화
for drc in range(4):
newr, newc = i+dr[drc], j+dc[drc]
if not inragne(newr, newc):
continue
if grid[newr][newc] in like:
likecnt+=1
if grid[newr][newc] ==0:
emptycnt+=1
candiated.append([likecnt, emptycnt, i, j])
candiated.sort(key=lambda x:(-x[0],-x[1],x[2],x[3])) #앞에 두개는 큰게 앞, 뒤에 두개는 작은개 앞
# grid update - 놀이기구에 앉히기
r,c= candiated[0][2], candiated[0][3]
grid[r][c]=now
likegrid[r][c] = like
# [2] 점수 구하기 - 앉힐때랑 주변 친구 수 달라졌으므로, 새로
answer =0
for i in range(n):
for j in range(n):
temppoint = 0
for drc in range(4):
newr, newc = i+dr[drc],j+dc[drc]
if not inragne(newr, newc):
continue
if grid[newr][newc] in likegrid[i][j]:
temppoint+=1
if temppoint !=0:
# 0이면 answer update없음
answer += 10**(temppoint-1)
print(answer)
정답 코드 (삼성st)💻
예시 출력
예시 input
2
3
3 5 8 9 2
6 1 2 3 4
1 5 8 7 6
8 2 5 3 1
9 4 8 2 1
4 6 5 7 8
7 3 4 2 9
2 1 6 3 5
5 4 3 8 6
3
3 5 8 9 2
6 1 2 3 4
1 5 8 7 6
8 2 5 3 1
9 4 8 2 1
4 6 5 7 8
7 3 4 2 9
2 1 9 3 5
5 4 3 2 7
코드
# 놀이기구 탑승 - 코드트리
import sys
sys.stdin = open("./input.txt")
input= sys.stdin.readline
# prepare ------
dr= [-1,1,0,0]
dc=[0,0,-1,1]
def inragne(r,c):
if 0<=r<n and 0<=c<n:
return True
return False
# main -----
num_questions=int(input())
for question in range(num_questions):
n = int(input())
# 초기화
grid =[[0]*n for _ in range(n)] # 놀이기구 grid
likegrid =[[[] for _ in range(n)] for _ in range(n)] # 그 위치에 있는 친구가 좋아하는 친구 list
# main -----------
# [1] 놀이기구 앉히기 --------------
for _ in range(n*n):
# 초기화
now, l1,l2,l3,l4 = map(int, input().split())
like =[l1,l2,l3,l4]
candiated =[] # now가 위치 될 수 있는 곳 후보
for i in range(n):
for j in range(n):
if grid[i][j]!=0:
continue # 이미 사람 있으면, 다음칸 탐색
# 주변 좋아하는 사람과 빈칸 세기
likecnt = emptycnt = 0 # 초기화
for drc in range(4):
newr, newc = i+dr[drc], j+dc[drc]
if not inragne(newr, newc):
continue
if grid[newr][newc] in like:
likecnt+=1
if grid[newr][newc] ==0:
emptycnt+=1
candiated.append([likecnt, emptycnt, i, j])
candiated.sort(key=lambda x:(-x[0],-x[1],x[2],x[3])) #앞에 두개는 큰게 앞, 뒤에 두개는 작은개 앞
# grid update - 놀이기구에 앉히기
r,c= candiated[0][2], candiated[0][3]
grid[r][c]=now
likegrid[r][c] = like
# [2] 점수 구하기 - 앉힐때랑 주변 친구 수 달라졌으므로, 새로
answer =0
for i in range(n):
for j in range(n):
temppoint = 0
for drc in range(4):
newr, newc = i+dr[drc],j+dc[drc]
if not inragne(newr, newc):
continue
if grid[newr][newc] in likegrid[i][j]:
temppoint+=1
if temppoint !=0:
# 0이면 answer update없음
answer += 10**(temppoint-1)
print(f'#{question+1} {answer}')
728x90