알고리즘

    프로그래머스 - 오픈채팅방

    링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제설명 문자열이 담긴 record 배열이 있고, 각 문자열은 "입장 or 퇴장or닉네임변경, 유저 ID, 유저 닉네임" 3칸으로 이루어져있다.채팅방에 누군가 들어오면 "[닉네임]님이 들어왔습니다.", 나가면 "[닉네임]님이 나갔습니다."를 출력해준다. 닉네임 변경 방법은 다음과 같이 두가지이다. 1. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 2. 채팅방에서 닉네임을 변경한다..

    프로그래머스 - 길 찾기 게임

    링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42892 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 2차원 좌표값으로 이루어진 배열 nodeinfo를 인수로 준다. 좌표를 기준으로 아래와 같은 규칙으로 트리 노드들을 구성한다. 트리를 구성하는 모든 노드의 x, y 좌표 값은 정수이다. 모든 노드는 서로 다른 x값을 가진다. 같은 레벨(level)에 있는 노드는 같은 y 좌표를 가진다. 자식 노드의 y 값은 항상 부모 노드보다 작다. 임의의 노드 V의 왼쪽 서브 트리(left ..

    백준(1644) - 소수의 연속합

    링크 : https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 코드 import sys input = sys.stdin.readline N = int(input()) res = 0 decimal = [] for i in range(2,N+1): check = True for j in range(2, int(i**(0.5)+1)): if i%j == 0: check = False break if check: decimal.append(i) prefixSum = [0] for i in decimal: prefixSum.append(i+prefixSum[-1]) len_pr..

    프로그래머스 - 신고 결과 받기

    링크 : https://school.programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def solution(id_list, report, k): answer = [] report_list = {} report_cnt = {} for i in id_list: report_list[i] = set([]) report_cnt[i] = set([]) for i in report: who, ban = i.split() report_list[who].add(ban) repor..

    프로그래머스 부대복귀

    링크 : https://school.programmers.co.kr/learn/courses/30/lessons/132266 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 from collections import deque def solution(n, roads, sources, destination): world = [[] for _ in range(n+1)] for s, e in roads: world[s].append(e) world[e].append(s) visited = [-1] * (n+1) visited[destination] = 0 ..

    [Python] 백준 10989 - 수 정렬하기 3

    시간제한 : 5초 / 메모리 제한 : 8MB [문제] N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. [예제] https://www.acmicpc.net/problem/10989 [코드] import sys input = sys.stdin.readline print = sys.stdout.write N = int(input()) res = dict() for i in range(N): tmp = int(input()) if tmp in res: res[tmp] = res[tmp]+1 else: res[tmp] = 1 res = sorted(res.items()) for i in res: for j in range(i[1]): print("%s\n" % i[0]) 시간 : 87..

    [Python] 백준 1920번 수 찾기

    시간제한 : 1초 / 메모리 제한 : 128MB [문제] N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. [예제] 입력 5 4 1 5 2 3 5 1 3 7 9 5 출력 1 1 0 0 1 [코드] import sys input = sys.stdin.readline print = sys.stdout.write N = int(input()) tmp = set(map(int, input().split())) M = int(input()) check = list(map(int, input().split())) for i in check: if i in tmp: print("%s\n" % "1") else: print("%s\n"..

    [Programmers] Lv1. 시저 암호

    문제설명 A-Z, a-z 알파벳을 n만큼 밀어서 만드는 시저 암호가 있다! input s를 암호처럼 n만큼 밀었을 때 만들어진 암호문 result를 return해라! (입출력 예시) s n result "AB" 1 "BC" "z" 1 "a" "a B z" 4 "e F d" 제한 조건 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다. 풀이 아스키 코드로 알파벳 부분에서 n만큼 밀어주면서 만약에 Z에 도달했다면 다시 A로 돌아오게 아이디어 설정 돌아오는 아이디어는 원형큐랑 같은 방식으로 생각! ● 실수 : 조건식을 65