알고리즘 스터디에 관하여
개인적으로 알고리즘을 따로 공부하지 않고 있었는데 ( 귀찮아서.. ㅜㅜ ) 알고리즘 스터디를 하면서 아주아주 실력이 많이 늘었다는 생각을 해봅니다. 스터디가 다 끝나고 생각해보니 알고리즘을 아예 모르고 있었구나 라는 생각을 해봤어요.
🕵️♂️팀원
- 코딩 테스트를 준비하시는 분
- 알고리즘을 토론하고 좋은 코드가 무엇인지 이야기 하실분
- Blue, Chan, Peony, Nox
알고리즘 준비해야 하는 이유
- 기술 평가: 코딩 테스트는 개발자의 기술과 능력을 평가하는 데 도움이 됩니다.
- 문제 해결 능력: 실제 프로젝트나 업무에서 문제를 해결하는 데 필수적인 기술입니다.
- 팀과의 호환성: 팀에 새로 합류하는 개발자의 성공적인 통합을 지원할 수 있습니다.
- 면접 준비: 코딩 테스트는 실제 기술 면접에 대비하는 데 도움이 됩니다.
- 자기 성장: 자신의 기술을 향상시키고 새로운 문제를 해결하는 법을 배울 수 있는 기회를 제공
- 경쟁력 강화: 코딩 테스트 성적이 높은 경우, 개발자는 더 많은 기회를 얻을 수 있습니다.
저희는 서로 각기 다른 언어를 쓰고 있기 때문에 각자 원하는 언어로 알고리즘 문제를 푸는 방식으로 공부를
했습니다. 각자 문제를 1개씩 골라서 총 4개의 문제를 푸는 방식이였는데 서로 다른 언어로 풀고 다른 방법으로 푸는
방법이 알고리즘에 대해 좀 더 효율적으로 공부할 수 있는 방식이였지 않나? 라는 생각을 해봅니다.
다같이 끝까지 열심히 해서 아주 기분이 좋습니다. 다양한 접근 방식을 알아가는게 제일 좋았던 것 같아요.
즐거웠던 문제
🍔 짝지어 제거하기
문제 설명
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다.
이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다.
문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요.
성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들어,
문자열 S = baabaa 라면b aa baa → bb aa → aa →의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
def solution(s):
answer = 0
stackS = []
# [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
for i in range(len(s)):
#스택이 비어있는 경우
if len(stackS) == 0:
stackS.append(s[i])
elif stackS[-1] == s[i]:
stackS.pop()
else:
stackS.append(s[i])
if len(stackS) == 0:
return 1
return answer
풀이 과정 ( 만약!! s 가 abba 라면 !! )
- 처음에는 스택에 아무것도 없으므로 stack = [a]가 들어갈 것이다.
- 2번째 for문에는 stack[-1] = a이고 s[1]=b이므로 a!=b이므로 stack=[a,b]가 된다.
- 3번째 for문에는 stack[-1] = b이고 s[2]=b이므로 b==b이므로 **stack.pop()**을 이용해 b가 삭제된다. stack= [a]
- 4번째 for문에는 stack[-1] = a이고 s[3]=a이므로 a==a이므로 **stack.pop()**을 이용해 a가 삭제된다. stack= []
- 위와 같이 stack의 기능을 이용해 stack의 첫 번째 원소도 뒤에 나오는 문자열의 원소들과 비교가 가능하다.
🍔 숫자 배열 회전
N x N 행렬이 주어질 때,
시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고,
다음 N 줄에는 N x N 행렬이 주어진다.
[출력]
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
import sys
sys.stdin = open("./input.txt", "r")
def rotate(arr) :
arrR = [[0] * N for _ in range(N)] # [[0,0,0,0,0], [0,0,0,0,0]....]
for i in range(N) :
for j in range(N) :
arrR[i][j] = arr[N-1-j][i]
return arrR
T = int(input()) # 10
for test_case in range(1, T + 1) :
N = int(input()) # 3
arr = [list(map(int, input().split())) for _ in range(N)]
arr1 = rotate(arr)
arr2 = rotate(arr1)
arr3 = rotate(arr2)
print("#{}".format(test_case))
for a,b,c in zip(arr1, arr2, arr3) :
rotate1 = "".join(map(str, a))
rotate2 = "".join(map(str, b))
rotate3 = "".join(map(str, c))
print("{} {} {}".format(rotate1, rotate2, rotate3))
회고
후반에 SW 를 준비하면서 Python 으로 알고리즘을 공부하면서 시작해봤는데 왜 Python 으로 알고리즘을 준비하라고 하는지 아주 뼈저리게 느꼇습니다. 너무 쉬워요. 뭐 2차원 배열도 너무 쉽게 만들어 주고 머리속으로 어떻게 풀지만 생각해 놓으면 알고리즘 짜는거는 아주아주 수월합니다. 다들 python 으로 준비해 보세요. ㅎㅎ..
'Study' 카테고리의 다른 글
정처기 및 CS 스터디 (0) | 2024.06.05 |
---|---|
알고리즘 스터디 회고록(by Nox) (1) | 2024.06.05 |