문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명
for test_case in range(1,11):
n, num = map(int,input().split()) #문자의 총 수 , 문자열
num_list = list(map(int, str(num)))
i = 0
while True:
if i == len(num_list)-1: #i가 리스트 끝까지 온다면 탈출
break
if num_list[i] == num_list[i+1]: #만약 붙어있는 값이 같다면
num_list.pop(i+1) #뒤에있는 값부터 pop
num_list.pop(i) #그 다음 앞의 값 pop
i = 0 #다시 처음부터 본다.
else:
i+=1 #붙어있는 값이 같지 않다면 i의 값을 계속 증가시킨다.
print("#{} {}".format(test_case, int("".join(map(str, num_list)))))
다른 코드 및 설명 - stack 활용
for test_case in range(1, 11):
n, num = input().split()
num_list = list(num)
stack = [] #빈 스택 리스트
for next_num in num_list: #문자열의 문자를 돌아가보면서 확인한다.
if next_num not in stack: #만약 아직 스택에 없다면,
stack.append(next_num) #스택에 문자를 추가한다.
else: #만약 스택에 있는 숫자라면
if next_num == stack[-1]: #만약 그 문자가, 스택의 가장 최근에 들어간 문자와 같다면,
stack.pop() #스택에 들어간 문자를 꺼낸다.
else: #만약 문자가 스택의 가장 최근에 들어간 문자와 같지 않다면,
stack.append(next_num) #그냥 스택에 추가해준다.
print("#{} {}".format(test_case, "".join(stack)))
피드백
스택 자료구조를 활용하면 편한 문제이다. 딱 내가 연습하고 싶었던 문제 유형이다. 스택 리스트를 초기화 해두고, 조건에 해당하는 문자열의 문자를 스택 리스트에 넣어가면서 문제를 해결하면 된다.
처음에 내가 문제를 푼 방식도 스택 자료구조를 어느정도 활용하였다고 볼 수 있지만, 100% 스택 자료구조의 개념을 활용했다고 보기엔 어렵다. 더군다나 붙어있는 문자가 같다면 다시 i=0으로 돌아가서 문자열의 처음부터 다시 반복문을 수행하는 면에서 상당히 비효율적이다고 볼 수 있다. 하지만 stack을 활용한 다른 코드에서는, stack에 넣은 문자와, 문자열의 문자들을 비교하면서 효율적으로 문제를 풀이하였다. 이러한 유형의 문제를 만났을 때 활용할 수 있도록 숙달해야겠다.
'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글
[SWEA/D3] 5948 새샘이의 7-3-5 게임 / 백트래킹 (1) | 2023.05.07 |
---|---|
[SWEA/D3] 3499 퍼펙트 셔플 / stack (0) | 2023.05.07 |
[SWEA/D3] 1228 암호문1 (0) | 2023.05.07 |
[SWEA/D3] 1217 거듭 제곱 (0) | 2023.05.07 |
[SWEA/D3] 4615 재미있는 오셀로 게임 (1) | 2023.05.06 |
문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명
for test_case in range(1,11):
n, num = map(int,input().split()) #문자의 총 수 , 문자열
num_list = list(map(int, str(num)))
i = 0
while True:
if i == len(num_list)-1: #i가 리스트 끝까지 온다면 탈출
break
if num_list[i] == num_list[i+1]: #만약 붙어있는 값이 같다면
num_list.pop(i+1) #뒤에있는 값부터 pop
num_list.pop(i) #그 다음 앞의 값 pop
i = 0 #다시 처음부터 본다.
else:
i+=1 #붙어있는 값이 같지 않다면 i의 값을 계속 증가시킨다.
print("#{} {}".format(test_case, int("".join(map(str, num_list)))))
다른 코드 및 설명 - stack 활용
for test_case in range(1, 11):
n, num = input().split()
num_list = list(num)
stack = [] #빈 스택 리스트
for next_num in num_list: #문자열의 문자를 돌아가보면서 확인한다.
if next_num not in stack: #만약 아직 스택에 없다면,
stack.append(next_num) #스택에 문자를 추가한다.
else: #만약 스택에 있는 숫자라면
if next_num == stack[-1]: #만약 그 문자가, 스택의 가장 최근에 들어간 문자와 같다면,
stack.pop() #스택에 들어간 문자를 꺼낸다.
else: #만약 문자가 스택의 가장 최근에 들어간 문자와 같지 않다면,
stack.append(next_num) #그냥 스택에 추가해준다.
print("#{} {}".format(test_case, "".join(stack)))
피드백
스택 자료구조를 활용하면 편한 문제이다. 딱 내가 연습하고 싶었던 문제 유형이다. 스택 리스트를 초기화 해두고, 조건에 해당하는 문자열의 문자를 스택 리스트에 넣어가면서 문제를 해결하면 된다.
처음에 내가 문제를 푼 방식도 스택 자료구조를 어느정도 활용하였다고 볼 수 있지만, 100% 스택 자료구조의 개념을 활용했다고 보기엔 어렵다. 더군다나 붙어있는 문자가 같다면 다시 i=0으로 돌아가서 문자열의 처음부터 다시 반복문을 수행하는 면에서 상당히 비효율적이다고 볼 수 있다. 하지만 stack을 활용한 다른 코드에서는, stack에 넣은 문자와, 문자열의 문자들을 비교하면서 효율적으로 문제를 풀이하였다. 이러한 유형의 문제를 만났을 때 활용할 수 있도록 숙달해야겠다.
'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글
[SWEA/D3] 5948 새샘이의 7-3-5 게임 / 백트래킹 (1) | 2023.05.07 |
---|---|
[SWEA/D3] 3499 퍼펙트 셔플 / stack (0) | 2023.05.07 |
[SWEA/D3] 1228 암호문1 (0) | 2023.05.07 |
[SWEA/D3] 1217 거듭 제곱 (0) | 2023.05.07 |
[SWEA/D3] 4615 재미있는 오셀로 게임 (1) | 2023.05.06 |