코드 47

[Java] 백준 1726번 : 로봇

1. 문제 https://www.acmicpc.net/problem/1726 1726번: 로봇 많은 공장에서 로봇이 이용되고 있다. 우리 월드 공장의 로봇은 바라보는 방향으로 궤도를 따라 움직이며, 움직이는 방향은 동, 서, 남, 북 가운데 하나이다. 로봇의 이동을 제어하는 명령어는 www.acmicpc.net 2. 풀이과정 문제를 처음 봤을 때, BFS를 떠올렸다가 1~3칸 전진과 1(90도)~2(180도)번 전진 처리가 복잡해 DFS로 풀었다. 그런데, 풀고나서 보니 DFS보다 BFS를 썼을 때 더 빠르게 구현할 수 있을 것 같아 BFS로 다시 풀어보았다. 결과적으로 BFS가 메모리, 시간 측면에서 더 효율적이다. 아래 그림은 두 코드에서 사용한 방향 전환할 때, 걸리는 시간을 구하는 방법이다. 동서..

[SQL] 조인

1. 조인이란? - 여러 테이블에 분산되어 있는 데이터를 "테이블 간의 관계를 지어" 활용할 수 있도록 함 2. 조인 활용 1. 조인 검색 - 자연 조인 : FROM절에 관련 테이블들을 명세 - 조인 조건(= 조인 프레디킷) : WHERE절에 조인하는 조건을 반드시 작성 /*과목코드 CO423에 수강한 학생의 성명, 학과, 성적을 검색하라*/ SELECT 성명, 학과, 성적 FROM 학생, 수강 WHERE 학생.학번 = 수강.학번 AND 과목코드 = 'CO423'; /*열 이름을 단순화하기 위해 FROM절에 별칭 사용*/ SELECT 성명, 학과, 성적 FROM 학생 S, 수강 E WHERE S.학번 = E.학번 AND 과목코드 = 'CO423'; 2. 셀프 조인 : 자기 자신과 조인 /*같은 학과 학생..

[SQL] 데이터 정의어(DDL) 활용

[DDL 종류] CREATE, ALTER, DROP, RENAME 1. 데이터베이스 1. 데이터베이스 생성 create database 데이터베이스명; - 다국어 처리 create database test default character set utf8mb3 collate utf8mb3_general_ci; - 이모지 문자까지 처리 create database test default character set utf8mb4 collate utf8mb4_general_ci * character set = '코드' 저장 방식에 대한 규칙들의 집합 * collate = 저장된 값들을 '비교'할 때 사용하는 규칙들의 집합 2. 데이터베이스 변경 alter database 데이터베이스명 default charact..

[Java] 백준 17135번 : 캐슬 디펜스

1. 문제 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 2. 풀이과정 1. 궁수 3명의 위치에 대해 조합 구하기 2. 각 조합마다 simulation() 실행 [Simulation] 1.시간이 N(배열의 세로)만큼 지나서 더 봤자 적들이 없는 경우 or 그 전에 적들을 다 물리친 경우 반복 종료 1-1. 각 궁수마다 bfs로 가장 가까운 적을 찾음 but 찾고 있는 거리가 D보다 커지면 다음 궁수로 넘어감. 1-2. 가장 가까운 적을 찾으면, -cas..

[Java] 백준 15686 : 치킨 배달

1. 문제 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 2. 풀이 과정 1) 입력을 받으면서 집과 치킨집의 위치를 각각 저장 2) 저장된 치킨 집 중 M개를 뽑는 조합 구현 3) 조합마다 결과를 비교해서 최소값 찾기 tip) 집과 치킨집과의 거리는 매조합마다 쓰이므로 미리 저장해놓고 가져다 쓴다. import java.io.BufferedReader; import java.io.InputStreamReader; impo..

[Java] 백준 16935 : 배열 돌리기 3

1. 문제 https://www.acmicpc.net/problem/16935 16935번: 배열 돌리기 3 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → www.acmicpc.net 2. 풀이 과정 import java.util.Arrays; import java.util.Scanner; public class Main { static String map[][]; static int N, M; public static void oper1() {//1. 상하 반전 for(int i=0;i

[실습] 트리거

1. 삭제 연산 use academicDB; drop table IF EXISTS testTBL; create table testTBL (id int, txt varchar(20)); insert into testTBL values(1, '이멕스아이디'); insert into testTBL values(2, '애프터스쿨'); insert into testTBL values(3, '에이오에이'); drop trigger IF EXISTS testTrg; DELIMITER // create trigger testTrg AFTER DELETE ON testTBL FOR EACH ROW BEGIN set @msg = '가수 그룹이 삭제됨'; END // DELIMITER ; set @msg = ' '; ins..

[Python_DynamicProgramming] 백준 11727번 : 2xn 타일링 2

1. 문제 https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 2. 풀이과정 n의 경우의 수 = (n-1에서 1x2블럭을 추가했을 때) + (n-2에서 2x1블럭 2개 혹은 2x2블럭 1개를 추가했을 때) 정리하면, f(n) = f(n-1) + f(n-2) * 2로 수식을 나타낼 수 있다. n = int(input()) x, y = 1, 3 for i in range(n-2): temp = y y = y + x*2 x = temp if n == 1: print(x) else: ..

[Python_DFS&BFS] 백준 16236번 : 아기 상어

1. 문제 https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 2. 풀이 과정 n = int(input()) graph = [[*map(int, input().split())] for _ in range(n)] shark = 2 dxy = [(-1, 0), (0, -1), (0, 1), (1, 0)]#위왼오아 #먹을 물고기 찾기 def find(n1, n2): q = [] q.append((n1, n2, 0)) visited = [[0 fo..

[Python_Greedy] 백준 1339번 : 단어 수학

1. 문제 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 2. 풀이 과정 1. 주어진 문자열이 "AFCA"이라면 A = 1000+1, F = 100, C = 10으로 자릿수만큼 수를 더해준다. 다음 문자열을 읽을 때는 이 값에 누적으로 더해주면 된다. 2. 누적으로 더한 수들을 정렬해서, 제일 큰 수를 가진 알파벳부터 9 => 8 => 7 ... 순으로 할당하는 것이 제일 큰 수를 만들 수 있다. 따라서 출력값은 (해당 알파벳이 가진 수..