CODING TEST/Code Tree

[코드트리 조별과제] 5주차 정리(흰검 칠하기 / 신기한 타일 뒤집기)

2024. 8. 18. 18:07
목차
  1. 학습내용
  2. 흰검 칠하기
  3. 신기한 타일 뒤집기
728x90

 

생각보다 시간이 소요되었던

문제였다.

명령어 하나 실수로

완전 다른 기능인

코드가 될 수 있다.

실수하지 말고 꼼꼼하게 살피자

 

 

 

학습내용

흰검 칠하기

 

[코드트리] 흰검 칠하기

 

문제가 길어서 형광펜으로 칠해봤다.

(더 복잡해진 것 같기도..😅)

 

문제 정리

1. 무한이 나열된 타일

1) 문제의 입력 최대 범위을 확인한다.

  • 1 ≤ n ≤ 1,000
  • 1 ≤ x ≤ 100

1.1) 최대 1,000번 x값으로100을 받는 경우가 있다.

→ 1,000 x 100 = 100,000

1.2) 방향은 L인 -(마이너스), R인 +(플러스)가 있다.

배열은 마이너스가 존재하지 않기 때문에,

100,000을 더하여 마이너스를 없애 보정한다.

👉 최종 타일의 범위 0 ~ 200,000

 

2. 아무 타일에서 시작

L 방향으로 최대 -100,000

R방향으로 최대 +100,000이 가능함으로

200,000의 중간인

👉 100,000을 시작위치로 한다.

 

3. 방향에 따른 색상

L → 흰색 ⬜

R → 검은색 ⬛

흰색(2번 이상) & 검은색(2번 이상) → 회색 🔲

(※ 흰색 또는 검은색이

1개만 2번 이상일 경우엔 회색 아님)

 

4. 칠하는 범위와 위치 ⭐

"현재위치" 포함한 x칸 칠한 후

마지막으로 칠한 위치에서 종료

 

5. 출력내용

각 3가지 색상에 대한 타일 수

 

코드

ARR_LEN = 200000 arr_num = [[0,0] for _ in range(ARR_LEN)] #[white, black] arr_color = ['N' for _ in range(ARR_LEN)] now = ARR_LEN // 2 n = int(input()) for i in range(n): ​​​​color = 'N' ​​​​color_num = -1 ​​​​go, dic = input().split() ​​​​go = int(go) ​​​​ ​​​​if dic == 'R': ​​​​​​​​start = now ​​​​​​​​end = now + go ​​​​​​​​color, color_num = 'B', 1 ​​​​​​​​now = end - 1 ​​​​else: ​​​​​​​​start = now - go + 1 ​​​​​​​​end = now + 1 ​​​​​​​​color, color_num = 'W', 0 ​​​​​​​​now = start ​​​​ ​​​​for i in range(start, end): ​​​​​​​​if arr_color[i] == 'G': ​​​​​​​​​​​​continue ​​​​​​​​arr_num[i][color_num] += 1 ​​​​​​​​arr_color[i] = color ​​​​​​​​if arr_num[i][0] >= 2 and arr_num[i][1] >=2: ​​​​​​​​​​​​arr_color[i] = 'G' print(arr_color.count('W'), arr_color.count('B'), arr_color.count('G'))

배열로 방향을 이동하며 칠할 때,

왼쪽은

현재로 부터 얼마나 앞에서 부터 칠할거냐 (-),

오른쪽은

현재로부터 얼마나 뒤에까지 칠할거냐로 생각한다(+).

 

색을 칠하는건 오른쪽 방향이지만

방향에 따라 시작지점과 끝지점을 설정한다고 생각한다.

 

R명령어에서 주의할 점은

연산 후 위치이다.

 

시작지점이 0 이라고 할때,

0+3 = 3으로, 현재 위치를 포함으로

0~2를 칠하게 된다.

 

"마지막으로 칠한 위치에서 종료"라는 조건에 맞게

연산 후 위치는

0+3-1

= 시작위치 + x - 1

= 종료위치 -1

 

L명령어에서 주의할 점은

시작과 종료지점이다.

 

처음위치가 0 이라고 할때,

시작지점은

0 - 3 + 1 = 2

= 처음위치 - x + 1

 

종료지점은

처음위치를 포함해야하기 때문에,

0 + 1 = 1

= 처음위치 + 1

 

 

양쪽으로 1칸씩 이동 후 오른쪽 2칸 이동

한칸만 칠해지는 경우를 보면

위의 사진과 같은 과정으로 진행된다.

 

 

추가로 틀렸던 부분에 대해 기록한다.

#===[올바른 코드]============ for i in range(start, end): ​​​​if arr_color[i] == 'G': ​​​​​​​​continue ​​​​​​​​​​​​ #===[틀린 코드]============ for i in range(start, end): ​​​​if arr_color[i] == 'G': ​​​​​​​​break

continue를 써줘야하는데

break를 사용해서 계속 오답이 되었다.

과정을 살펴보며 실수하지 말자.

 

 

 

 

 

728x90

 


 

신기한 타일 뒤집기

 

[코드트리]신기한 타일 뒤집기

 

 

ARR_LEN = 200000 arr_color = ['N' for _ in range(ARR_LEN)] now = ARR_LEN // 2 n = int(input()) for i in range(n): ​​​​color = 'N' ​​​​color_num = -1 ​​​​go, dic = input().split() ​​​​go = int(go) ​​​​ ​​​​if dic == 'R': ​​​​​​​​start = now ​​​​​​​​end = now + go ​​​​​​​​color, color_num = 'B', 1 ​​​​​​​​now = end - 1 ​​​​else: ​​​​​​​​start = now - go + 1 ​​​​​​​​end = now + 1 ​​​​​​​​color, color_num = 'W', 0 ​​​​​​​​now = start ​​​​ ​​​​for i in range(start, end): ​​​​​​​​arr_color[i] = color print(arr_color.count('W'), arr_color.count('B'))

 

흰검 칠하기에서 회색 타일만 없는 문제다.

색상을 제외한 내용이 유사하여

이전 문제 풀이로 대체한다.

 

위의 문제가 어렵다면

'신기한 타일 뒤집기'문제 부터 풀어보는 걸 추천한다.

728x90

'CODING TEST > Code Tree' 카테고리의 다른 글

[코드트리] L, R 그리고 B 문제 코드 풀이  (0) 2024.08.28
[코드트리 조별과제] 6주차 정리 (악수와 전염병의 상관관계 2 / 작은 구슬의 이동)  (0) 2024.08.25
[코드트리 조별과제] 4주차 (정렬된 숫자 위치 알아내기 / DateTime to DateTime)  (0) 2024.08.11
[코드트리 조별과제] 3주차 정리(출력결과 18 / 출력결과 29 / 재귀함수를 이용한 최소공배수)  (0) 2024.08.04
[코드트리 조별과제] 2주차 정리 (그 계절, 그 날 / 함수를 이용한 369 게임)  (0) 2024.07.28
  1. 학습내용
  2. 흰검 칠하기
  3. 신기한 타일 뒤집기
'CODING TEST/Code Tree' 카테고리의 다른 글
  • [코드트리] L, R 그리고 B 문제 코드 풀이
  • [코드트리 조별과제] 6주차 정리 (악수와 전염병의 상관관계 2 / 작은 구슬의 이동)
  • [코드트리 조별과제] 4주차 (정렬된 숫자 위치 알아내기 / DateTime to DateTime)
  • [코드트리 조별과제] 3주차 정리(출력결과 18 / 출력결과 29 / 재귀함수를 이용한 최소공배수)
더라
더라
250x250
더라
WINSOME
더라
전체
오늘
어제
  • ALL (63)
    • KNOWLEDGE (4)
      • Software engineering (1)
      • Data base (1)
      • Algorithm (0)
      • Security (2)
    • LANGUAGE (5)
      • Python (3)
      • Java (0)
      • C (0)
      • HTML (0)
      • CSS (2)
      • Javascript (0)
    • CODING TEST (35)
      • Beakjoon (20)
      • Code Tree (15)
    • PROGAMMING (6)
      • AR (0)
      • Android (0)
      • Program (1)
      • Project (5)
    • ERROR (4)
      • Android Error (1)
      • Unity (1)
      • Web (2)
    • Self-improvement (4)
      • certificate (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
더라
[코드트리 조별과제] 5주차 정리(흰검 칠하기 / 신기한 타일 뒤집기)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.