본문 바로가기
카테고리 없음

[코테준비] 삼성22. 코드트리: 놀이기구 탑승 python & 삼성식 출력 & 코테 현장

by deepbluechip 2023. 10. 14.
728x90

삼성코테 현장 팁✨

아래 모든 사항들은 완전 100%는 아니지만, 이미 보신 분들께 들은 내용이니 대부분 맞을 것이다. 

  • 공부자료: 코테 현장에서는 입장하고나서는 노트북은 열지도 못하고, 휴대폰도 사용할 수 없다고 한다. 그래서 프린트물로 가져가든 그래야하는데, 나는 모든걸 블로그에 적어놔서.. 어쩐담.. 풀이 노트를 봐야겠다.
  • 화장실: 그리고 인개원은 화장실이 진짜 좋다고 한다. 완전 궁금..! 그리고 시험중간에 화장실 갈 수 있다고 한다.  
  • 입실: 입실은 너무 빨리는 못한다고 한다. 정해진 입실시간보다 너무 빨리 갈 필요 없을 것 같다. 밖에서 대기.. 나는 한 10분전 도착하게 가려고 한다. 

 

놀이기구 탑승

풀이 노트

정답 코드 💻

# 놀이기구 탑승 - 코드트리

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