250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- HttpServletResponse
- html form
- 싱글톤
- fielderror
- 의존관계
- 인터페이스
- http 메시지 컨버터
- 테스트코드
- 티스토리챌린지
- objecterror
- 프록시
- java
- 참조변수
- JSON
- 스프링
- @configuration
- 김영한
- 추상클래스
- 오버라이딩
- 백준
- ocp
- equals()
- 코드트리
- 서블릿
- 코드트리조별과제
- 오블완
- 코딩테스트
- 스프링컨테이너
- 다형성
- DI
Archives
- Today
- Total
minOS
[코드트리 조별과제] 흰검 칠하기 본문
728x90
https://www.codetree.ai/missions/5/problems/painting-white-black
문제는 사이트 들어가시면 볼 수 있습니다.
이 문제는 주어진 규칙을 시뮬레이션하는 문제로, 복잡한 알고리즘보다는 문제에서 요구하는 동작을 정확하게 구현하는 것이 중요합니다.
우선 입력을 받습니다:
n = int(input()) cmd = [] for _ in range(n): step,direct = input().split() step = int(step) cmd.append((step,direct))
여기서 cmd는 각 명령어를 나타내며, step은 이동할 칸의 수, direct는 이동 방향(R 또는 L)을 나타냅니다.
그 다음, 문제에서 주어진 범위를 고려하여 필요한 배열의 크기를 설정하고, 배열의 중앙을 시작점으로 지정합니다:
arr = [[2,0,0] for _ in range(200000)] start = 100000
- arr[i][0]은 해당 칸이 어떤 색으로 칠해졌는지를 나타냅니다.
- arr[i][1]은 검정색으로 칠해진 횟수를, arr[i][2]은 흰색으로 칠해진 횟수를 의미합니다.
for step,direct in cmd : if direct =="R": for i in range(start,start+step): arr[i][1]+=1 if arr[i][1]>=2 and arr[i][2]>=2: arr[i][0] =0 #회색 else: arr[i][0] =1 #검정 start = start+step-1 if direct =="L": for i in range(start,start-step,-1): arr[i][2]+=1 if arr[i][1]>=2 and arr[i][2]>=2: arr[i][0] =0 #회색 else: arr[i][0] =-1 #흰 start = start-step+1
명령어를 처리할 때, R과 L 방향으로 나누어 각 칸을 색칠합니다. 만약 한 칸이 검정색과 흰색으로 각각 두 번 이상 칠해지면 그 칸의 색은 회색(arr[i][0] = 0)으로 변경됩니다. 그렇지 않다면, 해당 방향의 색상으로 최신 상태를 유지합니다 (검정색은 arr[i][0] = 1, 흰색은 arr[i][0] = -1)
d = {-1: 0, 1: 0, 0: 0} for i, _, _ in arr: if i in d: d[i] += 1 ans = d.values() print(*ans)
해쉬맵을 정의하여 arr[i][0]의 -1,1,0 의 개수를 세고, value들을 출력 형식에 맞게 지정하여 출력하면 됩니다.
728x90
'Problem Solving > 코드트리' 카테고리의 다른 글
[코드트리 조별과제] n개의 점 중 m개 고르기 (0) | 2024.08.24 |
---|---|
[코드트리 조별과제] 최대 동전 거슬러주기 (0) | 2024.08.02 |