[프로그래머스/Java] PCCP 기출문제 3번 : 충돌 위험 찾기
·
알고리즘
📝 문제 이름사용 언어 : Java 🔗 https://school.programmers.co.kr/learn/courses/30/lessons/340211?language=java 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 🔎 문제 설명 ✅ 풀이진짜 진짜 오래 걸렸던 문제였다.. BFS 비스무리하게 써야한다는 것은 알겠는데, 충돌 지점을 어떻게 체크할 것이고 충돌 지점을 체크할 때 같은 지점은 1번만 카운팅해야 하는데 이 부분을 어떻게 구현할 것인지 고민을 많이 헀던 문제다..코테 문제를 풀다가 오래걸리게 되면 어느정도 다른 사람의 코드나 반례 들을 찾아보곤 하는데 이 문제는 풀릴듯 말듯 오기..
[백준/Java] #1377 버블 소트
·
알고리즘
📝 문제 이름사용 언어 : Java레벨 : 골드 2 🔗 https://www.acmicpc.net/problem/1377 🔎 문제 설명 ✅ 풀이일단 처음에 문제를 정확히 이해를 못했었는데 여러 번 읽고 보니까 버블 정렬의 swap이 한 번도 일어나지 않은 루프가 언제인지 찾는 문제였다. 그래서 그냥 버블 정렬을 사용하면 되는거 아닌가? 라고 생각했으나 시간 제한 2초에 N의 최댓값은 500,000이기 때문에 시간초과로 풀 수 없고 다른 방법을 사용해야 했다. 안쪽 for 문이 실행되지 않는 순간 = swap이 발생하지 않았다 = 정렬이 완료됐다 라는 뜻이고, 나는 이 정렬 완료 시점을 찾아야 하는 것이다. 그러기 위해서는 정렬 전 인덱스와 정렬 후 인덱스가 필요한데 이 두 인덱스를 비교해서 각 데이..
[백준/Java] #12891 DNA 비밀번호
·
알고리즘
📝 DNA 비밀번호사용 언어 : Java레벨 : 실버 2 🔗 https://www.acmicpc.net/problem/12891 🔎 문제 설명 ✅ 풀이투 포인터와 비슷하게 풀면 되는 문제였다. 나는 HashMap 을 이용해서 inputCnt 에는 필요한 문자의 개수들을 넣어줬고, pwCnt 에는 부분 문자열에서 각 문자의 개수를 넣어줘서 풀었다! 처음에 들어올 때 A, C, G, T의 필요한 문자의 개수가 0이라면 cnt (필요한 문자의 개수와 부분 문자열의 문자 개수가 같은 개수를 카운팅하는 변수) 를 늘려주었다.일단 add() 메서드와 remove() 메서드를 작성했는데, add에서는 내 문자 map인 pwCnt 에서 입력받은 문자의 카운팅을 하나 늘려주고, 만약 하나 늘린 값이 inputCnt..
[Java] 정적 멤버와 static
·
Java
1️⃣ 정적 멤버 선언정적 멤버(static)는 클래스에 속하는 멤버로 인스턴스가 아닌 클래스 자체에 소속된다.정적 변수 : static으로 선언된 변수는 클래스의 모든 인스턴스가 공유하며, 프로그램 종료 시까지 유지된다.정적 메서드 : static으로 선언된 메서드는 클래스 이름으로 호출하며, 객체 생성 없이 사용할 수 있다.public class 클래스 { // 정적 필드 static 타입 필드 [= 초기값]; // 정적 메소드 static 리턴 타입 메소드(매개변수 선언, ...) [...]} 🔍 정적 변수 사용 판단 기준 : 객체마다 개별적으로 관리해야 하는 데이터라면 인스턴스 필드로 선언모든 객체가 공유해야 하는 데이터라면 정적 필드로 선언 🔍 정적 메서드 사용 판단 ..
[TIL] 객체지향 프로그래밍(OOP) 이란? (캡슐화, 상속, 다형성, 추상화)
·
TIL
📖 객체지향 프로그래밍 (OOP) 이란?객체지향 프로그래밍(OOP)은 코드의 유지보수성과 재사용성을 높이기 위해 데이터를 객체로 묶고, 이 객체들 간의 상호작용으로 프로그램을 설계하는 기법이다.OOP 는 대규모 소프트웨어 개발과 유지보수에 특히 유용하며, 복잡한 문제를 단순하게 구조화할 수 있게 도와준다. ❓ OOP 가 필요한 이유1. 코드 분류복잡한 코드를 체계적으로 정리하고 관리하기 쉽게 만든다.모듈화된 코드로 개발 속도를 향상2. 코드 교체 용이성시스템 변경 및 확장이 쉽다.특정 기능이나 모듈을 독립적으로 교체 가능3. 유지보수성변경 및 수정 시 다른 코드에 영향을 덜 미친다.스파게티 코드 방지 🌟 OOP 의 핵심 개념 (4대 특징) 1️⃣ 캡슐화 (Encapsulation)캡슐화란 데이터를 외..
[백준/Java] #5427 불
·
알고리즘
✏️ 불 사용 언어 : Java레벨 : 골드 4📎https://www.acmicpc.net/problem/5427 🔎 문제 설명상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다.매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에는 불이 붙지 않는다. 상근이는 동서남북 인접한 칸으로 이동할 수 있으며, 1초가 걸린다. 상근이는 벽을 통과할 수 없고, 불이 옮겨진 칸 또는 이제 불이 붙으려는 칸으로 이동할 수 없다. 상근이가 있는 칸에 불이 옮겨옴과 동시에 다른 칸으로 이동할 수 있다.빌딩의 지도가 주어졌을 때, 얼마나 빨리 빌딩을 탈출할 수 있는지 구하는 프로그램을 작성하시오. 📌 입력과 출력 입력첫째 줄에 테스트 ..
[백준/Java] #14503 로봇 청소기
·
알고리즘
로봇 청소기 (14503번) 사용 언어 : Java 레벨 : 골드5 📎 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net ❓ 접근 문제를 보자마자 그동안 풀어본 BFS 문제 풀이들을 약간 바꿔서 사용하면 되겠다 생각했다. 1. 현재 칸이 청소되지 않은 경우, 현재 칸을 청소한다. 2. 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 없는 경우 바라보는 방향을 유지한 채로 한 칸 후진할 수 있다면 ..
[백준/Java] #16985 Maaaaaaaze
·
알고리즘
Maaaaaaze (16985번) 사용 언어 : Java 레벨 : 골드2 📎 https://www.acmicpc.net/problem/16985 16985번: Maaaaaaaaaze 첫째 줄부터 25줄에 걸쳐 판이 주어진다. 각 판은 5줄에 걸쳐 주어지며 각 줄에는 5개의 숫자가 빈칸을 사이에 두고 주어진다. 0은 참가자가 들어갈 수 없는 칸, 1은 참가자가 들어갈 수 있는 칸을 www.acmicpc.net ❓ 접근 조건이 굉장히 많고 번거로워서 문제를 완전히 이해하는데 시간이 좀 걸렸다. 1. 백트래킹을 이용해 5개의 판의 쌓을 순서를 정한다. (순열) 2. 백트래킹을 이용해 각 판의 회전방향을 정한다. (중복순열) 3. 순서대로 회전방향에 맞게 판을 쌓는다. 4. 입구와 출구가 1일 경우 BFS를 돌..
[백준/Java] #18808 스티커 붙이기
·
알고리즘
스티커 붙이기 (18808번) 사용 언어 : Java 레벨 : 골드3 📎 https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net ❓ 접근 문제가 굉장히 긴데 열심히 읽어보니 문제 자체는 그렇게 어렵지 않았는데 구현을 어떻게 하느냐가 문제였다. 문제를 간단하게 요약하면 1. 왼쪽 위부터 스티커를 붙일 수 있는지 확인한다. 2. 전부 다 확인했을 때 붙이지 못하면 90도 회전한다. 3. 회전 후 1 ~ 2 과정 반복 (270도까지 회전) 4. 전체 스티커가..
[TIL] IntelliJ IDEA에서 DB 연결
·
Java
DB 연결을 위한 스키마, 테이블 생성spring-db 스키마 생성users 테이블 생성CREATE TABLE `spring-db`.`users` ( `id` VARCHAR(10) NOT NULL, `name` VARCHAR(20) NOT NULL, `password` VARCHAR(10) NOT NULL, PRIMARY KEY (`id`)); IntelliJ에서 domain Package 생성public class User { private String id; private String name; private String password; public String getId() { return id; } public String getName() {..
[백준/Java] #4179 불! (⚠️시행착오 엄청 많음 주의⚠️)
·
알고리즘
오늘은 피코 스터디에서 BFS 문제들을 풀고 코드리뷰 하는 시간을 가졌다. 다른 BFS 문제는 큰 고난 없이 잘 풀었는데 나의 멘탈을 탈탈 털게 해 준 문제가 있어서 들고 와봤다. [백준 - #4179] 불! 문제 링크 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net ✔️ 문제 설명 지훈이는 미로에서 일을 한다. 지훈이를 미로에서 탈출하도록 도와주자!미로에서의 지훈이의 위치와 불이 붙은 위치를 감안해서 지훈이가 불에 타기 전에 탈출할 수 있는지의 여부, 그리고 얼마나 빨리 탈출할 수 있는지를 ..
[백준/Java] #2164 카드2
·
알고리즘
[백준 - #2164] 카드2 https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net ✔️ 문제 설명 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다...