문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명 (맞았습니다!!)
- 어떠한 행에 룩이 있다면, 룩의 위치를 기준으로 밑의 열을 확인한다. 만약 룩이 있다면, 룩이 있을 때 마다 임시로 초기화해둔 temp_ok 값을 1만큼 증가시킨다. 8열까지 확인 후, temp_ok에 1이 저장되어 있다면, 그 행에는 룩이 현재 위치 밖에 없는 것이므로, ok를 1 증가시킨다.
- 이 후 반복적으로 1열~8열까지 같은 방법으로 확인한다. 만약 8열 문제의 조건들을 만족한다면, ok 값은 8이 될 것이고, yes를 출력한다.
t = int(input())
for test_case in range(1, t+1):
chess = []
ok = 0
temp_ok = 0
#입력받은 체스판 채우기
for i in range(8):
chess.append(list(input()))
#체스판 좌표 하나하나 살펴보기
#y축 중 x좌표에 해당하는 체스판 정보를 확인
for i in range(8): #Y측
for j in range(8): #x측
#임시 값, 현재 위치의 y좌표값을 변동 시키면서 확인하기 위함.
temp_ok = 0
#특정 열에 놓인 룩의 개수가 한 개일 때만
if chess[i].count("O") == 1:
#특정 열/ 행(가로,세로) 좌표에 해당하는 룩이 있는 칸에서
if chess[i][j] == "O":
#현재 칸 포함, 8열까지 살펴본다.
for k in range(i,8):
#만약 룩이 또 있다면
if chess[k][j] == "O":
#사전에 초기화해둔 임시 값을 1씩 증가시킨다.
temp_ok += 1
#임시 값이 1이라면(현재 칸 빼고는 룩이 놓여져있지 않다면)
if temp_ok == 1:
#ok에 1씩 증가시킨다.
ok += 1
else:
continue
if ok == 8:
print("#{} {}".format(test_case, "yes"))
else:
print("#{} {}".format(test_case, "no"))
나의 코드 및 설명 (테스트케이스 65개 중 42개만 맞은 코드)
- 처음에 접근했던 풀이 방식으로, 주어진 문제의 조건들을 다 만족하지 못하여 실패가 난 코드이다. 체스판 위에 룩이 있는지 행과 열 따로따로 비교하였고, 행 기준으로 룩이 하나씩 놓여져 있는지 확인, 열 기준으로 룩이 하나씩 놓여져 있는지 확인, 그 후 if조건의 and 연산자로 묶어서 행과 열 모두 룩이 하나씩 놓여져 있다면 yes를 출력했다.
- 문제의 조건들을 다 만족하지 못해서 풀이에 실패하였고, 결국 다른 방법을 찾다가 위의 방법으로 문제를 해결하였다.
garo_ok = 0
sero_ok = 0
sero = 0
def check():
global garo_ok, sero_ok, sero
#가로 체크
garo_ok = 0
for i in range(8):
if chess[i].count("O") == 1:
garo_ok += 1
else:
continue
#세로 체크
for i in range(8):
sero = 0
for j in range(8):
if chess[j][i] == "O":
sero += 1
if sero == 1:
sero_ok += 1
if garo_ok == 8 and sero_ok == 8:
return True
else:
return False
t = int(input())
for test_case in range(1, t+1):
chess = []
rook = 0
for i in range(8):
chess.append(list(input()))
for i in range(8):
rook += chess[i].count("O")
if rook == 8 and check() == True:
print("#{} {}".format(test_case, "yes"))
else:
print("#{} {}".format(test_case, "no"))
피드백
처음에 접근했던 풀이 방법이 틀리자 다른 방법을 찾아 문제를 해결했는데, 내 힘으로 풀게되어 엄청 뿌듯했다. 앞으로 비슷한 문제가 나올 경우에도 for문을 여러 개 사용할 때 값을 임시로 저장할 변수를 초기화하는 방법을 사용해야겠다.
'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글
[SWEA/D3] 13547 팔씨름 (0) | 2023.03.26 |
---|---|
[SWEA/D3] 13732 정사각형 판정 (2시간 풀고 Pass..) / BFS, 이중 for문 한줄로 작성하기 (0) | 2023.03.26 |
[SWEA/D3] 14361 숫자가 같은 배수 (2) | 2023.03.19 |
[SWEA/D3] 15758 무한 문자열 (0) | 2023.03.17 |
[SWEA/D3] 16002 합성수 방정식 (0) | 2023.03.17 |