基本フォーマット
//Javaプログラムの基本構造
public class AlgorithmBasics {
public static void main(String[] arguments) {
//変数宣言
int number = 100;
long bigNumber = Long.MAX_VALUE - 500L;
//出力処理
System.out.print(number); //改行なし出力
System.out.println(bigNumber); //改行あり出力
}
}
基本データ型
競技プログラミングで頻繁に使用されるデータ型を紹介します。
整数型
- int: 32ビット符号付き整数。範囲: -2³¹ ~ 2³¹-1
- long: 64ビット符号付き整数。範囲: -2⁶³ ~ 2⁶³-1
浮動小数点数
- float: 32ビット単精度浮動小数点数
- double: 64ビット倍精度浮動小数点数
その他の型
- boolean: true/falseの真理値
- char: 16ビットUnicode文字
入出力処理
import java.util.Scanner;
public class InputOutput {
public static void main(String[] args) {
Scanner inputReader = new Scanner(System.in);
int integerValue = inputReader.nextInt();
System.out.println(integerValue);
String textValue = inputReader.next();
System.out.println(textValue);
}
}
配列操作
import java.util.*;
public class ArrayOperations {
public static void main(String[] args) {
int[] fixedArray = new int[8]; //固定長配列
int[] dynamicArray = {5, 3, 8, 1, 9}; //初期化済み配列
System.out.println("配列長さ: " + fixedArray.length);
//配列の走査
for (int index = 0; index < dynamicArray.length; index++) {
System.out.println(dynamicArray[index]);
}
}
}
コレクションフレームワーク
HashSet(重複排除)
import java.util.*;
public class SetExample {
public static void main(String[] args) {
Set<Integer> numberSet = new HashSet<>();
numberSet.add(10);
boolean result = numberSet.add(10); //重複追加
System.out.println("追加結果: " + result); //falseを出力
System.out.println("包含確認: " + numberSet.contains(10));
numberSet.remove(10);
numberSet.clear();
}
}
ArrayList(動的配列)
import java.util.*;
public class ListExample {
public static void main(String[] args) {
List<Integer> numberList = new ArrayList<>();
numberList.add(50);
numberList.add(30);
numberList.add(70);
System.out.println("リストサイズ: " + numberList.size());
System.out.println("要素取得: " + numberList.get(1));
}
}
HashMap(キー値マップ)
import java.util.*;
public class MapExample {
public static void main(String[] args) {
Map<Integer, String> dataMap = new HashMap<>();
dataMap.put(1, "Tokyo");
dataMap.put(2, "Osaka");
String city = dataMap.get(2);
System.out.println("取得値: " + city);
System.out.println("マップサイズ: " + dataMap.size());
System.out.println("デフォルト値: " +
dataMap.getOrDefault(3, "Unknown"));
}
}
Stack(LIFO構造)
import java.util.*;
public class StackExample {
public static void main(String[] args) {
Stack<String> itemStack = new Stack<>();
itemStack.push("First");
itemStack.push("Second");
itemStack.push("Third");
while (!itemStack.isEmpty()) {
System.out.println(itemStack.pop());
}
}
}
Queue(FIFO構造)
import java.util.*;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> numberQueue = new LinkedList<>();
numberQueue.offer(100);
numberQueue.offer(200);
numberQueue.offer(300);
while (!numberQueue.isEmpty()) {
System.out.println(numberQueue.poll());
}
}
}
ソート操作
配列ソート
import java.util.*;
public class ArraySorting {
public static void main(String[] args) {
Integer[] numbers = {45, 12, 78, 23, 56};
//昇順ソート
Arrays.sort(numbers);
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
リストソート
import java.util.*;
public class ListSorting {
public static void main(String[] args) {
List<Integer> numberList = new ArrayList<>();
numberList.add(88);
numberList.add(42);
numberList.add(65);
numberList.add(27);
//降順ソート
Collections.sort(numberList, (a, b) -> b - a);
for (int value : numberList) {
System.out.print(value + " ");
}
}
}
文字列操作
import java.util.*;
public class StringOperations {
public static void main(String[] args) {
StringBuilder textBuilder = new StringBuilder();
textBuilder.append("Hello");
textBuilder.append(" ");
textBuilder.append("World");
textBuilder.reverse();
System.out.println(textBuilder.toString());
}
}
計算量分析
| コードパターン | 時間計算量 |
|---|---|
| 単一ループ | O(n) |
| 二重ループ | O(n²) |
| 指数増加ループ | O(log n) |