전체 글 279

프로그래머스Lv 0 로그인 성공?

🧫 문제 분석✔️ 출처https://school.programmers.co.kr/learn/courses/30/lessons/120883📖 문제id,pw와 db 값 확인 및 결과 출력🔅 문제풀이처음시도쉬운 문제라고 생각하고 막 풀다가 큰코 다쳤다.class Solution { public String solution(String[] id_pw, String[][] db) { String answer = ""; for(int i = 0; i 이중 배열이 순회하면서 값이 계속 중첩 된다는걸 생각하지 못했다.예를 들면 [abc,123]이 id_pw 면 db는 [[abc,321],[asd,122]]에서첫번째 순회시 "wrong pw" 가 answer에 초기화되고..

programmers 2024.06.26

프로그래머스 Lv 0 배열 회전시키기

🧫 문제 분석✔️ 출처https://school.programmers.co.kr/learn/courses/30/lessons/120844📖 문제매개변수 direction에 따라 왼쪽 , 오른쪽으로 배열순서가 밀린다.🔅 문제풀이내가 푼 방식switch 문 : direction에 맞게 로직 실행for문 사용- right : i+1번째에 i번 초기화 하는 식class Solution { public int[] solution(int[] numbers, String direction) { int[] answer = new int[numbers.length]; switch(direction) { case "right" : for(..

programmers 2024.06.26

프로그래머스Lv 2 게임 맵 최단거리

🧫 문제 분석✔️ 출처게임 맵 최단거리 level 2📖 문제dfs/bfs 문제이다. bfs로 풀면 좋을것 같아서 bfs로 방향을 잡았다.방문한 좌표에 대해 check를 해주고, 갈 수 있는 곳을 check해주는 것이 핵심이다.처음에 visited를 q에서 뽑고나서 true로 해주어서 무한 루프에 빠졌었는데중복 좌표값이 Queue 에 추가되서 그런거였다.1 23 4그래프가 이렇게 있고Queue에 2,3 순으로 들어가 있다고 하자.2가 나와서 4를 추가한다.3이 나와서 4를 추가한다. 이를 해결하기 위해서 while문 밖에서 시작지점에 true를 미리 넣어주고가능한 좌표일때 방문 표시를 즉시 해줌으로써 해결하였다. 🔅 문제 풀이import java.util.*;class Solution { sta..

programmers/DFS-BFS 2024.06.26

백준 실버1 숨바꼭질 1697

🧫 문제 분석 ✔️ 출처숨바꼭질 1697번 - 백준 📖 문제🔅 문제 풀이수빈이의 위치 x동생의 위치 k수빈이는 -1, +1, *2 로 이동할 수 있고 이는 1초를 사용한다.graph를 조건에 만족하는 최대 크기로 만들어서 각 위치에 따른 초를 적을 것이다.처음 수빈이가 있는 장소는 1로 초기화한다. 너비우선탐색으로 하되 문제에서 주어진 위치에 대한 조건식을 걸어주고 (0 이동하려는 곳에 이전에 이동한 흔적이 있는지 확인하여 걸린시간이 덮어씌어지는 것을 방지한다.x-1, x+1, x*2 3번의 위치이동을 하고 graph 인덱스의 값에 현재 위치의 걸린시간 +1 초를 더해 이동한 흔적을 남긴다. 그리고 이동한 위치를 queue에 넣는다. 방문하지 않은 곳은 걸린시간이 0이다. 왜냐하면 graph를 만들..

순환

순환이란 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법으로 팩토리얼이 가장 대표적인 예시다.int factorial(int n) { if (n    순환에서 가장 중요한 점은순환을 멈추는 부분과순환을 호출하는 부분이 있어야 한다는 것이다.  순환 호출을 멈추는 부분이 없다면 시스템 오류가 발생할 때까지 무한정 호출하게 된다 .(StackOverflow) 그렇다면 반복 알고리즘 보다 순환 알고리즘이 더 좋은가? 상황에 따라 다른데 문제의 값을 줄일 수 있다면 순환 알고리즘아니라면 반복 알고리즘이 좋을 수 있다.피보나치 수열을 순환으로 실행해보면 연산 중복 현상으로 인해 효율이 떨어지기에 반복 알고리즘이 더 나은 선택이다.    이외에도 두 수의 최대 공양수를 구하는 유클리..

CS/자료구조 2024.01.26

자료구조의 정의

자료구조란?데이터에 대한 효울적인 접근 및 수정을 가능하게 하는 자료의 조직, 관리, 저장 체계 데이터의 모임,데이터 간의 관계, 데이터에 적용할 수 있는 함수나 명령을 포함한 (프로그램에서) 자료들을 정리하여 보관하는 구조 알고리즘의 조건- 입력 : 0개 이상의 입력이 존재- 출력 : 1개 이상의 출력이 존재- 명백성 : 각 명령어의 의미는 모호하지 않고 명확해야함- 유한성 : 한정된 수의 단계 후에는 반드시 종료되어야 함- 유효성 : 각 명령어들은 실행 가능한 연산이여야 함  자료형 기초 자료형 : char, int float, double파생 자료형 : 배열 포인터사용자 정의 자료형 : 구조체, 공용체, 열거형 데이터 집합과 연산의 집합int 자료형 데이터{-INT_MIN, ... , - 2, -1..

CS/자료구조 2024.01.26

백준 2667번 : 단지번호붙이기 자바

백준 2667번 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 풀이 미로 찾기와 매우 유사한 문제이다. 다른점은 단지라는 그래프의 개수와 각 단지의 집들 즉, 각 그래프의 노드들의 개수를 오름차순으로 출력하는 문제이다. 그저 그래프를 찾아내서 얼마만큼의 노드들이 연결되어 있는지만 확인하기에 BFS, DFS 둘다 사용이 가능하다. 여기서는 BFS를 사용하였다. import java.io.*; import java.util.*; public class Main { static int[][] graph; st..

백준 2606번 : 바이러스 자바

백준 2606번 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net 문제 풀이 그래프에서 1번 컴퓨터(노드)를 시작점으로 연결되어있는 컴퓨터들은 모두 바이러스에 감염된 것이기에 BFS , DFS 둘다 사용하여 풀 수 있다. 이번에는 DFS를 사용하여 풀었다. 재귀호출 , Stack 두 가지 경우를 둘다 사용해보았다. import java.io.*; import java.util.*; public class Main { static int[][] graph; static boolean[] visited; static i..

백준 2178번 : 미로탐색 자바

백준 2178번 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 풀이 BFS를 사용하여 풀었다. 시작점이 (0,0)으로 고정되어있고 각 칸과 칸 사이의 거리는 동일하고 이동할 수 있는 칸들은 서로 연결되어 있기 때문에 결국에는 미로를 그래프로써 본다면 (N,M)까지 가는 거리는 그 높이만큼이 거리라고 볼 수 있다. import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.StringToken..

백준 1260번 : DFS와 BFS 자바

백준 1260번 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 풀이 DFS와 BFS의 기본적인 문제 보통 DFS는 스택이나 재귀호출 BFS는 큐를 사용한다. import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { public static Queue card; public static void main..