Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,13 @@

public class BFS implements Algorithm {

@Override
public boolean isSolution(Algorithm algorithm) {
return algorithm instanceof BFS;
}

@Override
public String getSolution() {
return "주변부터 둘러보기";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,13 @@

public class BinarySearch implements Algorithm {

@Override
public boolean isSolution(Algorithm algorithm) {
return algorithm instanceof BinarySearch;
}

@Override
public String getSolution() {
return "반띵 ㄱㄱ";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,13 @@

public class DFS implements Algorithm {

@Override
public boolean isSolution(Algorithm algorithm) {
return algorithm instanceof DFS;
}

@Override
public String getSolution() {
return "나는 한 놈씩 조져";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,13 @@

public class DP implements Algorithm {

@Override
public boolean isSolution(Algorithm algorithm) {
return algorithm instanceof DP;
}

@Override
public String getSolution() {
return "누가 첫날부터 DP문제를 들고옵니까";
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,68 @@
package com.example.algorithmbot;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringJoiner;
import java.util.stream.IntStream;

public class Main {
private static final int COUNT = 2;
private static final int MAX_DAY = 20;

public static void main(String[] args) {
List<Algorithm> problems = List.of(new BFS(), new DFS(), new TwoPointer(), new BinarySearch(), new DP());

Wchae wchae = new Wchae();
for (int i = 0; i < MAX_DAY; i++) {
List<Algorithm> todayProblems = selectTwoProblems(problems);
List<String> solveResults = new ArrayList<>();
printAlgorithmNames(todayProblems);

for (Algorithm problem : todayProblems) {
solveResults.add(wchae.solveAlgorithm(problem));
}
printSolveResult(solveResults);
}
}

private static void printSolveResult(List<String> solveResult) {
String result = generateResults(solveResult);
System.out.println("우주 : " + result + System.lineSeparator());
}

private static String generateResults(List<String> solveResult) {
StringJoiner joiner = new StringJoiner(" / ");
solveResult.forEach(joiner::add);

return joiner.toString();
}

private static List<Algorithm> selectTwoProblems(List<Algorithm> problems) {
int range = problems.size();

return IntStream.range(0, COUNT)
.map(i -> generateRandomNumber(range))
.mapToObj(problems::get)
.toList();
}

private static int generateRandomNumber(int size) {
Random random = new Random();
return random.nextInt(size);
}

private static void printAlgorithmNames(List<Algorithm> algorithms) {
String names = generateAlgorithmNames(algorithms);
System.out.println("오늘의 알고리즘 : " + names);
}

private static String generateAlgorithmNames(List<Algorithm> algorithms) {
StringJoiner joiner = new StringJoiner(", ");
for (Algorithm algorithm : algorithms) {
String name = algorithm.getClass().getSimpleName();
joiner.add(name);
}
return joiner.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,13 @@

public class TwoPointer implements Algorithm {

@Override
public boolean isSolution(Algorithm algorithm) {
return algorithm instanceof TwoPointer;
}

@Override
public String getSolution() {
return "너에게 닿기를...";
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
package com.example.algorithmbot;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Random;

public class Wchae {
private final Map<Algorithm, Integer> algorithmMap = new HashMap<>();
private final Random random = new Random();

public String solveAlgorithm(Algorithm algorithm) {
int solveCount = algorithmMap.getOrDefault(algorithm, 0);

Optional<Algorithm> algo = algorithmMap.keySet()
.stream()
.filter(elem -> elem.isSolution(algorithm))
.findFirst();
if (algo.isPresent()) {
double solveProbability = solveCount * 0.1;
double percentage = random.nextDouble();

if (percentage < solveProbability) {
algorithmMap.put(algorithm, solveCount + 1);
return algorithm.getSolution();
}
return "스트레스 받네...";
}
algorithmMap.put(algorithm, solveCount + 1);
return "스트레스 받네...";
}
}