[문제풀이] 2차원 배열 90도 회전, 뒤집기 꿀팁 2차원 배열을 뒤집거나 회전시킬 때 규칙을 외워서 구현하거나 모양에 신경 쓰면서 회전시키면 굉장히 헷갈린다. 간단하게 아래의 방법대로 해보자. 적당히 3*4 정도의 직사각형을 회전시킨다. 단, 회전시킬때 모든 칸에 좌표를 적어놓고 회전시킨다. 회전 후 각 좌표가 어떻게 변했는지 규칙을 찾아본다. 모양에 집중하는 것이 아니라 규칙을 찾는 것에 집중한다. 이제 3*4가 아니라 n*m 직사각형을 회전시키면 어떻게 될지 규칙을 일반화해 보면 끝! 알고리즘/문제풀이 2023.11.23
[TIL] 23.11.21 이제 알바도 그만두고 복학 전까지 공부에 좀 전념하기로 했다. 오늘은 저번에 풀다 포기한 시뮬레이션 - 감시 문제를 마저 풀고 자바 공부를 좀 했다. 시뮬레이션 문제가 굉장히 풀기 힘든데 막상 풀고 나면 왜 힘들었나 싶다. 내일부터는 문제풀이 1~2문제 + 자바 공부를 병행해야겠다. 자바의 기본적인 복습이 끝나면 스프링 박치기로 일단 스프링 try 해보면서 좀 익혀야겠다. 시간이 된다면 데이터베이스까지 연결시켜서 공부해보고 싶다. TIL 2023.11.21
[BOJ] C++ 15683: 감시 - 백트래킹과 재귀, 시뮬레이션의 전형적인 문제 2023.10.25 - [알고리즘/문제풀이] - [BOJ] C++ 15655 N과 M (6) - 제한이 까다로운 백트래킹 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 예제가 굉장히 많아 백준에서 참고하시길 바랍니다. 주의할 점은 백준의 test case에는 4번 cctv에 대한 검증이 부족하므로 개인적으로 테스트해볼 것을 추천합니다. 먼저 문제는 최대 8 * 8 크기에 최대 8개의 cctv 각 cctv는 최대 4방향이므로 4^8 = 65536이다. 따라서 완전탐색으로도 충분히 시간안에 풀 수 있을.. 알고리즘/문제풀이 2023.11.21
[JAVA] 정수형과 실수형 - 정밀도를 주의하자! 1. 정수형 - byte, short, int, long 정수형 변수의 자료형은 4개가 있으며 차례로 1byte, 2byte, 4byte, 8byte이다. 모든 정수형은 n개의 비트에 대해 가장 왼쪽의 비트를 부호 비트로 사용하고 나머지는 값을 표현하는 데 사용한다. 따라서 n비트로 표현할 수 있는 부호 있는 정수의 범위는 -2^(n-1) ~ 2^(n-1) - 1이다. 2. 실수형 - float, double 실수형은 차례로 4byte, 8byte이다. 실수형 변수는 비트를 부호, 지수, 가수 부분으로 나누어 사용한다. 실수는 2의 제곱을 곱한 형태, 즉 +-M * 2^E의 형태로 저장한다. 여기서 M이 가수 부분, E가 지수 부분이다. float타입은 부호를 1비트, 지수를 8비트, 가수를 23비트로 .. 프로그래밍 언어/Java 2023.11.11
[JAVA] 변수의 타입과 입출력 1. JVM(Java Virtual Machine) 자바는 다른 언어들과 달리 운영체제에 독립적이다. 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM 하고만 통신하고 JVM이 해당 운영체제가 이해할 수 있게 변환해서 전달한다. 그래서 자바로 작성된 프로그램은 운영체제나 하드웨어에 관계없이 실행 가능하다. 단, JVM은 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다. 2. 변수의 타입 변수의 타입은 크게 기본형과 참조형으로 나눌 수 있다. 기본형 변수는 data를 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 memory address를 값으로 갖는다. 기본형 변수 타입은 boolean, char, byte, short, int, long, float, double으로 .. 프로그래밍 언어/Java 2023.11.02
[BOJ] C++ 16987: 계란으로 계란치기 - 전형적인 백트래킹인지 판단하고 풀어보기 16987번: 계란으로 계란치기 원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱 www.acmicpc.net 예제가 굉장히 많아 백준에 들어가서 보시는 것을 추천합니다! 굉장히 재미있는 문제인데, 데이터의 수가 8로 굉장히 적다. 완전 탐색을 먼저 고려해 보고 문제에서 시키는 조건대로 알고리즘을 생각해 보자. 문제를 풀다가 알게 된 건데 1번 계란으로 3번을 깬 후 3번 계란으로 1번을 다시 깰 수 있다. 헷갈릴 것 같아서 이 조건은 먼저 기억해 두자. 문제의 조건을 따라서 계란을 깨다 보면 백트래킹 형태로 상태 공간 트리를 만들면서 구현하게 될 것 같다... 알고리즘/문제풀이 2023.11.01
[TIL] 2023.10.30 오늘은 백트래킹 문제를 하나 풀었다. 백트래킹을 정석적인 재귀로만 생각한다면 절대 풀 수 없는 문제였다. 백트래킹을 너무 어렵게 생각해 왔던 것 같은데, 상태 공간 트리를 만들면서 가지치기해주기만 기억하면 될 것 같다. 쉽게 말하면 한 번 가지 끝까지 가보고 안되면 에코 궁 써서 돌아오기 정도로 생각하면 될 것 같다. TIL 2023.10.30
[BOJ] C++ 1941: 소문난 칠공주 - BFS와 백트래킹 섞어 쓰기 1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5×5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작 www.acmicpc.net 예제 YYYYY SYSYS YYYYY YSYYS YYYYY ans : 2 처음에는 일반적인 백트래킹으로 접근했다. 어차피 데이터의 크기가 25로 매우 작고 시간은 2초로 여유롭니 모든 점을 시작점으로 두고 O(25) 재귀식을 상하좌우 중 방문할 수 있다면 방문하는 식으로 짜서 백트래킹으로 구현하였다. 이 방법에서 두 가지 문제점을 발견했는데, 사진으로 보는 게 나을 것 같다. 애초에 백트래킹은 재귀식으로 해야한다는 고정관념에 잘못 접근한 것 같다. 차라리 데이터가 .. 알고리즘/문제풀이 2023.10.30
[BOJ] C++ 6603: 로또 - 일반적인 BFS 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 예 7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0 ans : 1 2 3 4 5 6 1 2 3 4 5 7 1 2 3 4 6 7 1 2 3 5 6 7 1 2 4 5 6 7 1 3 4 5 6 7 2 3 4 5 6 7 1 2 3 5 8 13 1 2 3 5 8 21 1 2 3 5 8 34 1 2 3 5 13 21 1 2 3 5 13 34 1 2 3 5 21 34 1 2 3 8 13 21 1 2 3 8 13 34 1 2 3 8 21 34 .. 알고리즘/문제풀이 2023.10.25
[BOJ] C++ 15663: N과 M (9) - 중복 제거가 헷갈리는 백트래킹 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 예제 1 3 1 4 4 2 ans : 2 4 예제 2 4 2 9 7 9 1 ans : 1 7 1 9 7 1 7 9 9 1 9 7 9 9 예제 3 4 4 1 1 1 1 ans : 1 1 1 1 백트래킹에 대한 설명 없이 바로 풀이를 할 예정입니다. 기본 백트래킹 코드를 잘 모르거나 백트래킹이 익숙하지 않으면 아래 게시글을 꼭 읽어보길 바랍니다!! [알고리즘] 백트래킹 - 재귀를 통한 구현과 응용 문제 백트래킹을 공부하기 전에 BFS와 재귀를 꼭 꼭 먼저 공부하는 .. 알고리즘/문제풀이 2023.10.25