| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 데이터베이스
- 코딩테스트준비
- 연결 리스트
- 파이썬
- 항해99
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- til
- C
- 코딩테스트
- 코드트리
- Java
- 오블완
- 인접 행렬
- 프로그래머스
- 갭체크
- 코테공부
- 티스토리챌린지
- 운영체제
- 개발자루틴
- 자바
- 코딩테스트사이트추천
- 개발자취업
- 99클럽
- 알고리즘
- 자바스크립트
- 프로그래밍 언어
- 1일1코테
- 플로이드-워셜
- 웹
- 자료구조
- Today
- Total
와드의 블로그
99클럽 코테 스터디 1일차 TIL 본문
비기너
문제
문자열 내 p와 y의 개수
#문자열
https://school.programmers.co.kr/learn/courses/30/lessons/12916
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
toLowerCase() 메서드를 이용해서 문자열의 문자를 소문자로 만든다.
문자열을 순차 탐색하며 p의 개수와 y의 개수를 센다.
p의 개수와 y의 개수를 비교하여 리턴한다.
참고
자바 String 메서드 정리
charAt(i)해당 인덱스에 위치한 문자를 반환한다.s.length()문자열의 길이를 반환한다.s1.equals(s2)두 문자열을 비교한 결과를 반환한다.s1.concat(s2)두 문자열을 연결한 문자열을 반환한다.s.substring(i1, i2)
ward.tistory.com
코드
class Solution {
boolean solution(String s) {
int cntp = 0, cnty = 0;
for (char c : s.toLowerCase().toCharArray()) {
if (c == 'p')
cntp++;
if (c == 'y')
cnty++;
}
return cntp == cnty;
}
}
미들러
문제
1072번: 게임
# 이분탐색
https://www.acmicpc.net/problem/1072
풀이
최대 게임 수가 10억이므로 순차탐색을 통해 정답을 구하려 하면 시간초과가 발생한다.
1부터 10억 사이에서 승률이 바뀌는 게임 수을 이분탐색을 이용해서 찾는다.
승률을 구하는 과정에서 게임 수에 100을 곱하면 int의 범위를 벗어날 수 있으므로 long으로 계산해줘야 한다.
참고
이분탐색
이분탐색정렬된 배열에서 원하는 값을 O(logn)의 시간복잡도로 찾을 수 있는 알고리즘이다.배열의 중앙에 있는 값을 조사하여 찾고자 하는 값이 배열의 왼쪽 또는 오른쪽에 있는지를 알아내어 탐
ward.tistory.com
코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int z = (int) (y * 100L / x);
int s = 1, e = 1000000000, ans = -1;
while (s <= e) {
int m = (s + e) / 2;
int tmp = (int) ((y + m) * 100L / (x + m));
if (z < tmp) {
ans = m;
e = m - 1;
} else
s = m + 1;
}
bw.write(ans + "");
bw.flush();
bw.close();
}
}
챌린저
문제
11403번: 경로 찾기
# dfs # 플로이드-워셜
https://www.acmicpc.net/problem/11403
풀이 1
각 정점마다 dfs를 진행하여 연결된 정점을 구한다.
dfs를 시작하는 정점을 시작할 때 방문 처리 하지 않고 다른 정점을 경유해서 왔을 때 방문 처리한다.
참고
그래프 탐색
DFS그래프를 탐색할 때 한 노드에서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법을 말한다.검색 속도가 BFS에 비해 느리지만 더 간단하게 구현할 수 있다.재귀를 이용하여 구
ward.tistory.com
코드
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int[][] adj;
static int[] visited;
static void dfs(int x) {
for (int i = 0; i < n; i++) {
if (visited[i] == 1 || adj[x][i] == 0)
continue;
visited[i] = 1;
dfs(i);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
n = Integer.parseInt(br.readLine());
adj = new int[n][n];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++)
adj[i][j] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < n; i++) {
visited = new int[n];
dfs(i);
for (int j = 0; j < n; j++)
bw.write(visited[j] + " ");
bw.write("\n");
}
bw.flush();
bw.close();
}
}
풀이 2
그래프의 각 모든 정점에서의 다른 정점과의 연결성을 체크하는 문제이므로 플로이드-워셜 알고리즘을 응용하여 풀 수 있다.
참고
플로이드-워셜
플로이드-워셜플로이드-워셜 알고리즘은 음의 사이클이 없는 그래프에서 모든 정점에서 모든 정점까지의 최단 거리를 모두 구할 수 있는 알고리즘이다.플로이드-워셜 알고리즘은 다이나믹 프
ward.tistory.com
코드
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int[][] adj;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
n = Integer.parseInt(br.readLine());
adj = new int[n][n];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++)
adj[i][j] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
if (adj[j][i] == 1 && adj[i][k] == 1)
adj[j][k] = 1;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
bw.write(adj[i][j] + " ");
bw.write("\n");
}
bw.flush();
bw.close();
}
}
'TIL' 카테고리의 다른 글
| 99클럽 코테 스터디 6일차 TIL (0) | 2024.11.02 |
|---|---|
| 99클럽 코테 스터디 5일차 TIL (0) | 2024.11.01 |
| 99클럽 코테 스터디 4일차 TIL (0) | 2024.10.31 |
| 99클럽 코테 스터디 3일차 TIL (0) | 2024.10.30 |
| 99클럽 코테 스터디 2일차 TIL (0) | 2024.10.29 |