알고리즘

    [python] SWEA - 1225. [S/W 문제해결 기본] 7일차 - 암호생성기

    [python] SWEA - 1225. [S/W 문제해결 기본] 7일차 - 암호생성기

    🤔문제 해결 숫자가 클 가능성이 있어서 while문을 계속 돌리기보단 규칙을 찾아서 미리 한번에 빼주고 나머지를 돌렸다. 5싸이클 마다 전체 숫자에 -15 씩 하게 된다. (모든 수 동일하게) 그러므로 주어진 숫자 중 가장 작은 수를 15로 나눠 몫을 구하고 모든 숫자에서 15 * 몫 만큼 빼준다. 그 다음 싸이클을 돌려주면 while 5번 이내로 문제 해결 💨 테스트 케이스 2번에서 답이 틀렸는데 그 이유는 딱 나누어 떨어지는 경우가 있을 수 있음 그럴 땐 몫에서 -1 해준다음 진행하면 해결👵 💻소스 코드 T = 10 for t in range(1, T + 1): input() answer = [] input_list = list(map(int, input().strip().split(' '))) mi..

    [python] SWEA - 1209. [S/W 문제해결 기본] 2일차 - Sum

    [python] SWEA - 1209. [S/W 문제해결 기본] 2일차 - Sum

    🤔문제 해결 가로, 세로, 대각선으로 나눠서 해결 가로: 한 행씩 sum 해줌 세로: 90도 돌린다음 할까 하다가 굳이라는 생각에... 리스트를 만들어 한 열끼리 수를 더해줌 대각선: 정사각형이므로 n행n열, n행(N-1-n)열 로 하나씩 더해줌 가장 큰 값 💨 오랜만에 다시 시작해서 가벼운 문제로 시작(❁´◡`❁) 💻소스 코드 T = 10 # 테케는 10개 for test_case in range(1, T + 1): input() # 테케 번호 받기 N = 100 answer = 0 arr = [list(map(int, input()[:-1].split(' '))) for _ in range(N)] # 2 차원 행렬화 # [:-1]을 한 이유는 맨 마지막에 띄어쓰기가 들어간다. 오랜만에 해서 왜 그런지..

    [python] 프로그래머스 - 아이템 줍기(위클리 챌린지)

    [python] 프로그래머스 - 아이템 줍기(위클리 챌린지)

    🤔문제 해결 테두리 그리기 2차원 배열 만들어 두고 테두리는 1, 내부는 0으로 표시 테두리와 내부가 겹칠경우 0으로 표시 위 그림이 예시의 방향과 다른 이유는 좌표계가 다르기 때문 그리고 2배를 주고 테두리를 잡았다 그 이유는 2배를 안주면 길이 아니여도 1칸 차이가 날 수 있기 때문에 경로가 되어 버린다. 길 찾기는 BFS 로 최단거리 찾아주면 끝 💻소스 코드 from collections import deque def solution(rectangle, characterX, characterY, itemX, itemY): answer = 0 MAX = 102 # 두배로 늘리기 때문에 최대 102 # 테투리 그리기 field = [[5] * MAX for _ in range(MAX)] # 5는 맨처음..

    [python] 프로그래머스 - 110 옮기기(월간 코드 챌린지 시즌2)

    [python] 프로그래머스 - 110 옮기기(월간 코드 챌린지 시즌2)

    🤔문제 해결 1. 모든 110 찾기 2. 나머지에 0이 있으면 그 0뒤에 110 다 붙이고 3. 0이 없으면 앞에 110을 다 붙인다 월코챌 해설지 보고 풀었는데 답 구하는게 헷갈려서 많이 고민한 문제 💻소스 코드 def solution(s): answer = [] for x in s: # 모든 110 찾기 # 110 찾으면 변형된 x에서 또 찾기 one_one_zero_cnt = 0 stack = [] for x_one in x: if x_one == '1': stack.append(x_one) else: if len(stack) >= 2 and stack[-1] == '1' and stack[-2] == '1': stack.pop() stack.pop() one_one_zero_cnt += 1 els..

    [python] 프로그래머스 - 스타 수열(월간 코드 챌린지 시즌1)

    [python] 프로그래머스 - 스타 수열(월간 코드 챌린지 시즌1)

    🤔문제 해결 1. 주어진 배열의 숫자의 개수를 센다. -> Counter 라이브러리 이용 2. 주어진 배열에서 꺼낸 숫자의 인덱스를 구한다. 3. 구한 인덱스의 왼쪽 or 오른쪽의 숫자를 적절하게 사용할 수 있는지 판단하고 스타 수열을 만든다. 💨 Counter 라이브러리 대신 { 1: [0, 3, 6, 9], ... } 이런식으로 인덱스를 넣어줘서 길이와 인덱스를 한꺼번에 알기 쉽게하는 방법도 봤다. 💨 중간 중간 길이가 짧은 애들을 끊어주지 않으면 시간초과 날 것 같다. 💻소스 코드 from collections import Counter def solution(a): # 주어진 배열의 숫자의 개수를 구한다. number_cnt = Counter(a) answer = 0 # 구한 숫자를 하나 씩 꺼내..

    [python] 프로그래머스 - 교점에 별 만들기(위클리 챌린지)

    [python] 프로그래머스 - 교점에 별 만들기(위클리 챌린지)

    🤔문제 해결 💨 교점 구하기 -> 문제에서 주어진 공식으로 모든 교점을 구한다. 💨 배열 크기 정하기 -> x, y 의 최대 최소값으로 💨 배열 만들기 -> 배열을 만든다. 💨 별 찍기 -> 왜 좌표가 (y_max - y, x - x_min) 인지 헷갈릴 수 있다. 수학 좌표랑 배열로 나타내는 좌표의 0점이 다르기 때문에 적절하게 바꿔줘야한다. 💻소스 코드 def solution(line): dot_list = [] for i in range(len(line)): A, B, E = line[i] for j in range(i + 1, len(line)): C, D, F = line[j] bunja = A * D - B * C if int(bunja) == 0: continue x = (B * F - E ..