티스토리 뷰
#. Problem
* The copyright in this matter is in BOJ
#. Resolution Process
1. Read and understand problem
2. Redefine the problem + abstract
3. Create solution plan (select Algorithm, Data structure)
4. Prove the plan (check performance time and usage memory)
5. Carry out the plan
6. Look back on the plan and find a way to improve it
#. Solve
푸는 방법은 정말 많이 있는 것 같다
1. 양 주변에 울타리 치기
2. 늑대 주변에 울타리 치기
3 입력받을 때 빈칸을 다 울타리로 쳐버리기
등등..
#. Code
ㅇ늑대 주변에 울타리 쳐버리기!
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 | dx, dy = [0, -1, 0, 1], [1, 0, -1, 0] def Solution(): for x in range(R): for y in range(C): if map[x][y] == 'W': for i in range(4): xx, yy = x + dx[i], y + dy[i] if xx < 0 or yy < 0 or xx >= R or yy >= C: continue if map[xx][yy] == 'S': print('0') return else: if map[xx][yy] == '.': map[xx][yy] = 'D' print(1) for r in range(R): print(''.join(map[r])) return R, C = map(int, input().split()) map = [list(input()) for _ in range(R)] Solution() | cs |
ㅇ입력받을 때 빈칸을 다 울타리로 쳐버리는 방법
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 | dx, dy = [0, -1, 0, 1], [1, 0, -1, 0] def Solution(): for x in range(R): for y in range(C): if map[x][y] == 'W': for i in range(4): xx, yy = x + dx[i], y + dy[i] if xx < 0 or yy < 0 or xx >= R or yy >= C: continue if map[xx][yy] == 'S': print('0') return print(1) for r in range(R): print(''.join(map[r])) return R, C = map(int, input().split()) map = [input().replace('.', 'D') for _ in range(R)] Solution() | cs |
C++로도 시도해봤는데 역시 C++에서 문자열 처리는 정말.. 최악이다ㅋㅋㅋ
python에서 문자열하다가 C++에서 하려니 참..
line 23) map을 입력받을 때 '.'는 울타리로 다 선치환을 해준다.
line 3~20)
line 6~8) 좌표에 늑대가 있을 경우, 늑대의 상하좌우를 탐색
line 10) 탐색 시 좌표를 벗어날 경우 continue
line 13~15) 늑대 주변에 양이 있을 경우 '0'출력 후 return
line 17~20) 늑대와 양이 떨어져 있을 경우 결과를 출력
join을 사용하여 반복문 하나로도 이차원 배열 출력이 가능
#. Other Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | R, C = map(int, input().split()) map = [list(input()) for _ in range(R)] dx, dy = [0, 1, 0, -1], [1, 0, -1, 0] ck = False for i in range(R): for j in range(C): if map[i][j] == 'W': for w in range(4): ii, jj = i + dx[w], j + dy[w] if ii < 0 or ii == R or jj < 0 or jj == C: continue if map[ii][jj] == 'S': ck = True if ck: print(0) else: print(1) for i in range(R): for j in range(C): if map[i][j] not in 'SW': map[i][j] = 'D' for i in map: print(''.join(i)) | cs |
line 10~14) 마찬가지로 좌표에 늑대가 있을 시 늑대 상하좌우를 탐색
line 13) 좌표를 벗어날 경우 continue
line 14) 늑대 주변에 양이 있을 경우 ck 변수에 체크
line 16) 늑대 주변에 양이 있었을 경우 '0'출력
line 19~22) 'S' or 'W'를 제외하고 'D'로 치환
line 23~24) 출력
'PS > Problem_Solving' 카테고리의 다른 글
[BOJ] 1012. 유기농 배추,py(BFS, DFS, Flood Fill) (0) | 2020.05.24 |
---|---|
[BOJ] 14620. 꽃길.py.cpp(전수조사) (0) | 2020.05.19 |
[BOJ] 17413. 단어 뒤집기 2.py (조건문 구현) (0) | 2020.05.19 |
[BOJ] 16675. 두 개의 손(조건문 구현).py.cpp (0) | 2020.05.19 |
[BOJ] 2480. 주사위 세개, 2484. 주사위 네개(조건문 구현) (0) | 2020.05.18 |