本日はITストラテジスト試験を受験してきました。
情報処理試験はR02年秋季試験以来でした。(受ける気はあったが、ことごとく申込期限切れ...)
せっかくの午前1免除権も失効しており、久しぶりの午前1からの受験となりました。
会場と感想
横浜国立大学でした。駅から若干遠く、かつ、坂...会場に着いた頃にはヘトヘトでした。
横浜国立大学はITストラテジスト専用会場らしく、いつもよりも人数少なめ、平均年齢高めの印象でした。
試験の感想
午前1
2年分くらい過去問をやっての挑戦。とくにこれまでと変わりない印象。
自己採点は24/30(問)でした。
午前2
こちらも2年分くらい過去問をやって臨みました。用語のインプット不足を痛感しました。
自己採点は16/25(問)でした。多分、大丈夫だよな...
午後1
問1、問2を選択。午後1は国語の問題なので、特に記憶ことなく解くことができました。時間はそこそこ余りました。
午後2
問2を選択。「ITストラテジスト」としての記載観点のインプット不足でしたね。振り返るとPM的な視点で書いてしまったような...
何とか文字数は満たしましたが、久しぶりに2,000字を超える文字を書いたため、手が痛くなりました。
総括
勉強不足でしたね...やはり午後2は用意がないとつらいですね。とはいえ、用意をすることが心理的なハードルになり、勉強がおっくうになってしまいました。
しんどいながら、頭をフル回転させるこの試験は勉強しなきゃなーという気にさせてくれるため、合格にこだわらず(お金もかかるため一発でパスしたいとこですが)継続してチャレンジしていきたいと思います。
おまけ(クイックソート)
午前1の問3にクイックソートの問題が出たので、Javaで書いてみました。
ソース
import java.util.Arrays; import java.util.stream.Collectors; public class ITStrategistQuickSort { public static void main(String[] args) { int[] array = { 2, 3, 5, 4, 1 }; // デバッグ用に配列の中身を表示する System.out.println("ソート前:" + arrayToCommaSeparatedString(array)); quickSort(array, 0, array.length - 1); System.out.println("ソート後:" + arrayToCommaSeparatedString(array)); } /** * クイックソートを行うメソッド * * @param array ソート対象の配列 * @param i 配列の先頭のインデックス * @param j 配列の末尾のインデックス */ public static void quickSort(int[] array, int i, int j) { if (i < j) { System.out.println("quicksort i:" + i + ", j:" + j + ", array:" + arrayToCommaSeparatedString(array)); int pivotPos = partition(array, i, j); System.out.println("pivot pos:" + pivotPos + ", pivotValue:" + array[pivotPos] + ", array:" + arrayToCommaSeparatedString(array)); quickSort(array, i, pivotPos - 1); quickSort(array, pivotPos + 1, j); } } /** * ピボットの位置を決める * * @param array ソート対象の配列 * @param i 配列の先頭のインデックス * @param j 配列の末尾のインデックス * @return ピボットの位置 */ private static int partition(int[] array, int i, int j) { // 左端の値をピボットとする int pivotValue = array[i]; int k = i; for (int l = i + 1; l <= j; l++) { // ピボットより小さい値があれば、ピボットの位置をひとつ右にずらす if (array[l] < pivotValue) { k += 1; swapArrayValue(array, l, i); System.out.println("partition k:" + k + ", array:" + arrayToCommaSeparatedString(array)); } } System.out.println("partition end:" + arrayToCommaSeparatedString(array)); return k; } /** * 配列の値を入れ替えるメソッド * 2,3,5,4,1という配列があり、i=4, leftPos=0の場合、1,2,3,5,4となるように入れ替える。 * 2,3,5,4,1という配列があり、i=3, leftPos=1の場合、2,4,3,5,1となるように入れ替える。 * (インデックスiの値をleftPosの位置に挿入し、それ以降を右に移動する) * * @param array 配列 * @param i 入れ替える値のインデックス * @param leftPos 挿入する位置のインデックス */ private static void swapArrayValue(int[] array, int i, int leftPos) { int temp = array[i]; // leftPos以降の値をひとつずつ右にずらす for (int j = i; j > leftPos; j--) { array[j] = array[j - 1]; } array[leftPos] = temp; } /** * 配列の中身をカンマ区切りの文字列にして返す * * @param array 配列 * @return カンマ区切りの文字列 */ public static String arrayToCommaSeparatedString(int[] array) { return Arrays.stream(array).mapToObj(String::valueOf).collect(Collectors.joining(", ")); } }
実行結果
正解と同じ結果(「1,2,3,5,4」)になりました
ソート前:2, 3, 5, 4, 1 quicksort i:0, j:4, array:2, 3, 5, 4, 1 partition k:1, array:1, 2, 3, 5, 4 partition end:1, 2, 3, 5, 4 pivot pos:1, pivotValue:2, array:1, 2, 3, 5, 4 quicksort i:2, j:4, array:1, 2, 3, 5, 4 partition end:1, 2, 3, 5, 4 pivot pos:2, pivotValue:3, array:1, 2, 3, 5, 4 quicksort i:3, j:4, array:1, 2, 3, 5, 4 partition k:4, array:1, 2, 3, 4, 5 partition end:1, 2, 3, 4, 5 pivot pos:4, pivotValue:5, array:1, 2, 3, 4, 5 ソート後:1, 2, 3, 4, 5